Иногда нам необходимо связать данные из одного списка с данными в другом.

Суть реализации такова, из представления по средствам Ajax мы передаем запрос в функцию контролера, которая нам возвращает готовый список с результатами.

С алгоритмом определились, теперь давайте перейдем к реализации задуманного.

Для начала нам необходим основной список , предположим что он у вас уже есть. Под основным списком создадим пустой блок, куда будет выводиться дополнительный список.

<label>Назначение платежа</label>
<?php
// Корневой список
print '<select name="root" id="root">';
print '<option selected disabled></option>';
// В моем случаи корневой список формируется из справочника базы
foreach ($bdds as $bdds_row) {
print '<option value="'.$bdds_row['id'].'">'.$bdds_row['name'].'</option>';
}
print '</select>';
?>
// В этом блоке будет формироваться дополнительный список
<div id="sub"></div>

Теперь давайте в нашем представлении создадим JavaScript код, который будет обмениваться с контролером.

$(document).ready(function() {
$("#root").change(function() {
var val = $(this).find("option:selected").val();
$.ajax({
type: "POST",
url: "/office/linked",
data: "parent_id="+val,
cache: false,
success: function(txt){
$("#sub").html(txt);
}
});
});
});

Немного пояснений, данный код будет посылать POST запрос в функцию linked, которая находится в контролере office. Передаваться будет ID в переменной parent_id для записи, выбранной из корневого списка. Результат будет возвращаться в блок с идентификатором sub. Все это будет происходить по событию change для корневого списка с идентификатором root.

Теперь собственно сама функция linked, выглядит она у меня вот так.

public function linked() {
$parent_id = $this->input->post('parent_id');
$string = 'SELECT * FROM bdds WHERE parent_id = '.$this->db->escape($parent_id).'';
 
$query_linked = $this->db->query($string);
$linked_data = $query_linked->result_array();
 
print '<label>Подкатегория назначения платежа</label>';
print '<select name=\'sub\'>';
foreach ($linked_data as $link) {
print '<option value='.$link['id'].'>'.$link['name'].'</option>';
}
print '</select>';
}

Вот собственно и все, как видите ничего сложного в такой реализации нет.

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь