Вероятно, вы можете сделать это с помощью Javascript / Jquery для более изящного способа, но я точно знаю, что вы можете использовать AJAX и Session Octobercms, чтобы сделать это. (Мне нравится использовать то, что предоставляет OctoberCMS) Вот рабочий код, который я сделал специально, используя только страницу CMS October.
- Я использовал три части
- Я использовал jquery для просмотра тегов
<select>
и запуска Ajax-запроса.
- Я использовал OctoberCMS Session для хранения значений
Это код разметки партиалов: вы заметили, что это будет печатать только значения <option>
для элемента select.
<option value="">Select</option>
{% for a in array %}
<option value="{{ a }}" {% if a == selected %}selected{% endif %}>{{ a }}</option>
{% endfor %}
PHP-код партиала будет меняться для каждого партиала, но, например, вот первый: Здесь вы начинаете массив. Затем мы проверяем значения в сеансе с помощью Session::get('select2')
. Обратите внимание на -1
; Когда вы unset($array[$select2])
, он ищет индексный ключ. Наш массив действительно выглядит как [0=>1, 1=>2, 2=>3, 3=>4, 4=>5]
, и легко просто вычесть единицу, чтобы найти индекс ключа. Нам также сойдет с рук unset($array[-1])
, потому что в нашем массиве нет ключа индекса -1
. Затем мы получаем выбранное значение для <select>
, вызывая его собственное значение сеанса с помощью Session::get('select1')
. Затем мы помещаем построенный массив в партиал.
function onStart() {
$array = [1,2,3,4,5];
$select2 = Session::get('select2') - 1;
unset($array[$select2]);
$select3 = Session::get('select3') - 1;
unset($array[$select3]);
$this['selected'] = Session::get('select1');
$this['array'] = $array;
}
Разметка страницы CMS выглядит следующим образом: Первые три элемента вызывают параметры выбора по их частичному значению. Давайте посмотрим на Jquery. Я наблюдаю за изменением #selectOne
, а затем вызываю запрос. Мы обновляем каждый второй частичный. Мы нажимаем атрибут имени и значение с запросом.
<select name="select1" id="selectOne">
{% partial 'select1' %}
</select>
<select name="select2" id="selectTwo">
{% partial 'select2' %}
</select>
<select name="select3" id="selectThree">
{% partial 'select3' %}
</select>
{% put scripts %}
<script>
$('#selectOne').change(function(){
$(this).request('onUpdate', {
update: {
select2: '#selectTwo',
select3: '#selectThree'
},
data: {
value: $(this).val(),
name: $(this).attr("name")
}
})//*/
});
$('#selectTwo').change(function(){
$(this).request('onUpdate', {
update: {
select1: '#selectOne',
select3: '#selectThree'
},
data: {
value: $(this).val(),
name: $(this).attr("name")
}
})//*/
});
$('#selectThree').change(function(){
$(this).request('onUpdate', {
update: {
select1: '#selectOne',
select2: '#selectTwo'
},
data: {
value: $(this).val(),
name: $(this).attr("name")
}
})//*/
});
</script>
{% endput %}
Функция страницы CMS: здесь, если значение больше нуля, мы помещаем информацию в сеанс с помощью Session::put(key, value)
. Если параметр значения «выбрать», который имеет значение 0 (не больше нуля), мы удаляем значение выбора из сеанса.
function onUpdate() {
if (Input::get('value') > null) {
Session::put(Input::get('name'), Input::get('value'));
} else {
Session::forget(Input::get('name'));
}
}
Опять же, есть множество способов сделать это, но я уверен, что вы можете довольно легко адаптировать этот код к компоненту плагина.
person
Pettis Brandon
schedule
13.09.2019