我有动态创建产品功能列表并将所有值放在一个字符串中的代码,该字符串由换行符分隔并保存到数据库中。当这个字符串被传递给视图时,我输出为一个无序列表。当我去编辑块时,它不会显示列表中已有的内容,所以每次我需要编辑我的块时,我都必须重新输入所有功能,即使它不是功能列表(我有一些标题和其他文本区域) . 如果我将 php 变量放入我的编辑页面,它将向我显示已保存的内容,但我需要将其立即添加到列表中并且不单独显示。我基本上需要它来“自动追加”我的<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);
}
我的edit.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>';
我的 auto.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>