Я искал довольно долгое время, но я до сих пор не нашел достойного ответа на мой вопрос. Я пытаюсь отфильтровать мои результаты на основе значения, которое пользователь будет выбирать из selectbox. Однако selectbox заполняется из базы данных, и его длина варьируется. Первая запись выбора будет пустой, поэтому все соответствующие значения будут отображаться. Но когда выбрано другое значение из списка выбора, все несоответствующие им темы должны исчезнуть. Самый простой способ сделать это, вероятно, с Ajax, но сейчас я не могу обрисовать его вокруг, как …
Я развиваюсь на prestashop, поэтому передняя часть проекта использует smarty. Так что обычные PHP-способы просто не решат этого.
Таким образом, php-функция в основном передает информацию о связанных элементах в массив, а затем подталкивает ее к smarty для отображения. (в фойе)
Как это:
{foreach from=$projectsArray key=id item=projectOpen} {/foreach}
Очень легко получить доступ ко всей информации оттуда и построить структуру внутри массива.
Вот мой текущий код ajax для выполнения .php-файла при выборе изменений в поле
Выберите поле:
<select name="projects" id="projects" class="projects" size="{$project_options|@count eq 1}"> <option value="blank" selected="selected">All productsSelected</option> {html_options values=$project_values output=$project_options} </select>
Снова select-box специфичен для smarty, и он просто заполняет список из базы данных.
Код Ajax:
<script type="text/javascript"> $(document).ready(function() { $("#projects").change(function() { var id=$(this).val(); var dataString = 'id='+ id; $.ajax ({ type: "POST", url: baseDir + 'modules/blockprojekt/ajax-product_view_all.php', data: dataString, cache: false, success: function(html){ $("#rooms_view_container").html(html);} }); }); }); </script>
И в файле ajax я получаю его через
$_POST['id']
Но что мне делать дальше? Легче ли изменить значения массива некоторым выполненным запросом и заменить весь контент прогностического запроса или я могу как-то его фильтровать на основе значения selectbox?
БР
Я на самом деле пытался добиться своего решения, обойдя гору.
Поскольку элементы forach были подключены к элементам selectbox в базе данных, я смог использовать простой jquery, чтобы сделать трюк и отфильтровать их.
Вот код. возможно, кто-то сочтет это полезным в будущем. Это по очевидным причинам входит в цикл forach.
<script type="text/javascript"> $(function(){ $('#projects').change(function() { if($(this).val() == 'blank'){ $('.project_room_{$projectOpen.id_projekt_rooms}').hide(); $('.rooms_view_container').show(); } else { $('.project_room_{$projectOpen.id_projekt_rooms}').hide(); var selectVal = $('#projects :selected').val(); $('.project_room_'+selectVal).show(); } }); }); </script>
БР