У меня есть код, который динамически создает список характеристик продукта и объединяет все значения в одну строку, разделенную символами новой строки, и сохраняется в базе данных. Когда эта строка передается в представление, я вывожу как неупорядоченный список. Когда я иду редактировать блок, он не показывает, что уже есть в списке, поэтому мне приходится заново вводить все функции каждый раз, когда мне нужно отредактировать свой блок, даже если это не список функций (у меня есть некоторые заголовки и другие текстовые области) . Если я помещу переменную 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>