2

こんにちは、私は 10 月の cms の初心者です。モデルクラスで以下に示すメソッドを定義しました。このメソッドは、バックエンド フォームで選択オプションを表示するためにも使用されます。このメソッドは、キーが db のフィールド値と同様の値である配列を返します。メソッドを静的として定義したのは、関数を取得して db レコードで処理し、それを繰り返してキーに一致する配列の値を表示するフロント エンドでも推奨されるためです。それはすべて正常に動作します。私のcolumns.yamlファイルにあります。フロントエンドで行ったように、dbレコードに一致するメソッドの配列値をリストするにはどうすればよいですか。

public static function getSampleOptions()
{
    return[
          '1'=>'Sample1',
          '2'=>'Sample2'
          ];
}
4

2 に答える 2

3

こんにちは、10 月の CMS ヘルプ/サポートhttp://octobercms.com/index.php/forum/post/dropdown-shows-its-value-than-key-name-in-list-controllerの助けを借りて答えを見つけました 。 そしてlaravelのいくつかの概念を参照しました。

モデル クラス メソッド

public static function getSampleOptions()
{
    return[
      '1'=>'Mobile App',
      '2'=>'Web  App'
      ];
} 

Columns.Yaml ファイル

sample:
    label: Sample Column
    type: dropdown

再びモデルに戻り、属性オブジェクトを宣言し、フィールド名を空の値を持つキーとして含めます

public $attributes = ['sample'=>''];

get field_name Attribute() 関数を定義して、列の適切なキーに関連付けられた値を設定します

public function getSampleAttribute()
{
    $result = $this->attributes['sample'];
    $options = $this->getSampleOptions();

    foreach($options as $key=>$value)
    {
        if($key == $result)
        {
            return $value;
        }
    }
}

更新 レコードの編集中に問題を修正するソリューションは簡単です。パーシャルを作成し、フィールドを変更します。yaml

_sample_options.htm (部分) // ファイル名は_(アンダースコア)で始まる必要があります

<?php
$fieldOptions = $model->getSampleOptions();
$sample = $model->attributes['sample'];
?>
<select id="<?= $field->getId() ?>" name="<?= $field->getName() ?>" class="form-control custom-select" <?= $field->getAttributes() ?>>
    <?php foreach($fieldOptions as $key=>$label)
    {
    ?>
        <option value="<?= $key ?>"  <?php echo ($sample == $key)?"selected":'';  ?>><?= $label ?></option>
    <?php
    } ?>
</select>

ここで、$model$fieldは、目的のモデルのメソッドとプロパティにアクセスするために使用される部分変数です。ドキュメント: https://octobercms.com/docs/backend/forms#field-partial

Fields.Yaml ファイル

sample:
    label: Sample Field
    type: partial
    path: $/october/demo/controllers/sample/_sample_options.htm //path where the partial is located in the controller view
于 2016-03-18T05:27:08.620 に答える
0
break a for loop in october cms template if condition not satisfied?

{% for key, pTest in pack.products %}
                                {{loop.length}}
                                <li>{{pTest.productable.name}} {{ key }}</li>
                                {% if key == 2 %}
                                <li class="more">...</li>
                                {% endif %}
                                {% endfor %}
于 2016-03-21T05:38:15.607 に答える