製品機能リストを動的に作成し、すべての値を改行文字で区切られた1つの文字列にまとめて、データベースに保存するコードがあります。この文字列がビューに渡されると、順序付けられていないリストとして出力されます。ブロックを編集しようとすると、リストに既にあるものが表示されないため、機能リストでなくても、ブロックを編集する必要があるたびにすべての機能を再入力する必要があります(タイトルやその他のテキスト領域がいくつかあります) 。php変数を編集ページに入れると、保存されているものが表示されますが、リストにすぐに追加して、個別に表示しないようにする必要があります。基本的に、「autoappendTo」するために必要<ul>
です。これが私のコードです...
リストをcontroller.phpに保存するコントローラー関数
public function save($args) {
$args['features'] = implode("\n", $args['features']);//combine all feature items into one string, separated by "newline" characters
parent::save($args);
}
myedit.php-これによりリストに表示されます。置くだけecho $features
で文字列が出力されます。
echo '<div class="ccm-block-field-group">';
echo '<h2>' . t('Features') . '</h2>';
echo '<input type="text" id="inputList" />';
echo '<button type="button" id="addList">Add</button>';
echo $features = explode("\n", $features);
foreach ($features as $feature) {
echo '<li class="currentFeatures">' . $feature . '</li>';
};
echo '<ul class="featureList">';
echo '</ul>';
echo '</div>';
myauto.js-リストの作成を処理します
var listItemCounter = 0;
$("#addList").click(function() {
listItemCounter++;
var text = $("#inputList").val(); //assign a unique id number to this button, so it knows which hidden field to remove when clicked
var buttonDataId = text + '<button data-id="' + listItemCounter + '">x</button>';
if(text.length){
$('<li />', {html: buttonDataId}).appendTo('ul.featureList');
$('<input type="hidden" name="features[]" value="' + text + '" data-id="' + listItemCounter + '" />').insertAfter('ul.featureList');
};
});
$('ul').on('click','button', function(el){
$('input[data-id="' + $(this).attr('data-id') + '"]').remove();//remove the hidden field so it does not get POSTed when user saves
$(this).parent().remove()
});
そして最後に私のdb.xmlの一部
<field name="features" type="X2"></field>