Доброго времени суток, уже третьи сутки бьюсь над казалось бы просто задачей, но разобраться все не как не получается.. И так, по порядку: 1) Есть таблица которая содержит в себе информацию для 2 разделов "Товары", "Новости" (определяется различие между разделами, с помощью столбца type в таблице); 2) Есть страница на которую, при загрузке выводятся вся информация из вышеописанной таблицы; 3) На странице выпадающий список с 2 пунктами "Товары", "Новости". Нажимаем на "Новости", выводятся только новости, нажимаем на "Товары" выводятся только товары. РЕАЛИЗАЦИЯ (работаю на Godignaiter): 1) Выводим информацию на страницу так: HTML: <div id="content"> <!-- ФОРЫЧЬ ---> <?php $group = $post_array[1]; foreach ($group as $group): ?> <?=$group['img']?> <?=$group['name']?> <?=$group['url_g']?> <?=$group['id']?> <?=$group['visible']?> <?php endforeach?> <!--/ ---> </div> <!-- ПЕЙДЖЕР ---> <?php echo $this->pagination->create_links();?> <!--/ ---> 2) Разметка самого фильтра (выпадающего списка): HTML: <div class="dropdown"> <span class="selLabel">Выберите рубрику</span> <input type="hidden" name="cd-dropdown"> <ul class="dropdown-list"> <li> <span>Товары</span> </li> <li> <span>Новости</span> </li> </ul> </div> 3) Информацию о выбранном пункте передаем серверу так: Код (Javascript): var url_edit = document.location.pathname.split('/')[2]; $(".selLabel").click(function () { $('.dropdown').toggleClass('active'); }); $(".dropdown-list li").click(function() { $('.selLabel').text($(this).text()); $('.dropdown').removeClass('active'); $.ajax({ type: "post", url: "../admin_c/load_heading", data: { 'type': $.trim( $('.selLabel').text() ), }, success: function(data){ $('#content').load(''+url_edit+' #content'); } }); }); 4) Обработка алгоритма на сервере: PHP: // КОНТРОЛЛЕР function load_heading() { if (isset($_POST['type'])) { $this->load->library('pagination'); $config['base_url'] = base_url().'admin_c/load_heading/'; $config['type'] = $_POST['type']; $this->db->where('type', $_POST['type']); $this->db->from('group'); $config['total_rows'] = $this->db->count_all_results(); $config['per_page'] = '10'; $config['first_link'] = '<span class="first_last">ПЕРВАЯ</span>'; $config['last_link'] = '<span class="first_last">ПОСЛЕДНЯЯ</span>'; $config['next_link'] = '<span class="first_last"><i class="fa fa-chevron-right" aria-hidden="true"></i></span>'; $config['prev_link'] = '<span class="first_last"><i class="fa fa-chevron-left" aria-hidden="true"></i></span>'; $this->pagination->initialize($config); $this->data['post_array'][1] = $this->admin_model->get_group($config, $this->uri->segment(3)); $this->load->view('pages/admin/head'); $this->load->view('pages/admin/heading', $this->data); $this->load->view('pages/admin/footer'); }else{ $this->load->library('pagination'); $config['base_url'] = base_url().'admin_c/load_heading/'; $config['total_rows'] = $this->db->count_all('group'); $config['per_page'] = '10'; $config['first_link'] = '<span class="first_last">ПЕРВАЯ</span>'; $config['last_link'] = '<span class="first_last">ПОСЛЕДНЯЯ</span>'; $config['next_link'] = '<span class="first_last"><i class="fa fa-chevron-right" aria-hidden="true"></i></span>'; $config['prev_link'] = '<span class="first_last"><i class="fa fa-chevron-left" aria-hidden="true"></i></span>'; $this->pagination->initialize($config); $this->data['post_array'][1] = $this->admin_model->get_group($config, $this->uri->segment(3)); $this->load->view('pages/admin/head'); $this->load->view('pages/admin/heading', $this->data); $this->load->view('pages/admin/footer'); } } // МОДЕЛЬ function get_group($config, $offset){ $this->db->order_by("id", "desc"); if (isset($config['type'])) { $query = $this->db->get_where('group', array('type' => $config['type']), $config['per_page'], $offset); }else{ $query = $this->db->get('group', $config['per_page'], $offset); } return $query->result_array(); } ПРОБЛЕМА: фильтрация не срабатывает..., аякс успешно передает значение серверу, сервер его принимает, ошибок в работе скрипта тоже не наблюдается, но результата нет, все записи из таблица как выводились, так и выводятся. Очень прошу свежих взглядов и любых советов, как хороших так и плохих, потому как сам в тупике, и уже сломал голову(
@smartCreate смотри в этих функциях $this->db->where('type', $_POST['type']); $this->db->from('group'); что там не так. ну и можно попробовать явно указать типа $this->db->where('type', 'news'); ну и проверить наличие и соответствие столбцов типа и значений. если всё ок то ошибка наверно в классах --- Добавлено --- ошибся нужна эта функция $this->db->get_where( или тупо впендюрить свой запрос Ы
Я уже пробовал все о чем ты говоришь, тут понимаешь в чем штука, если бы было что-то не так вот здесь: $this->db->where('type', $_POST['type']); $this->db->from('group'); то и в модель, которая делает выборку из БД, это "не так" передавалось бы, и в итоге из БД не выводилось бы нечего, а в итоге выводиться все..., такое ощущения что после того как страница загрузилась, контроллеру уже по барабану что там я в него передаю, он тупо юзает то что было актуально при загрузке страницы, подтверждение этому можно найти в следующем - делаю так как ты говоришь, отключаю условие "если установлено значение POST['type']" и вместо POST['type'] задаю значение на прямую, вот так: PHP: // КОНТРОЛЛЕР function load_heading() { $this->load->library('pagination'); $config['base_url'] = base_url().'admin_c/load_heading/'; $config['type'] = 'news'; $this->db->where('type', $config['type']); $this->db->from('group'); $config['total_rows'] = $this->db->count_all_results(); $config['per_page'] = '10'; $config['first_link'] = '<span class="first_last">ПЕРВАЯ</span>'; $config['last_link'] = '<span class="first_last">ПОСЛЕДНЯЯ</span>'; $config['next_link'] = '<span class="first_last"><i class="fa fa-chevron-right" aria-hidden="true"></i></span>'; $config['prev_link'] = '<span class="first_last"><i class="fa fa-chevron-left" aria-hidden="true"></i></span>'; $this->pagination->initialize($config); $this->data['post_array'][1] = $this->admin_model->get_group($config, $this->uri->segment(3)); $this->load->view('pages/admin/head'); $this->load->view('pages/admin/heading', $this->data); $this->load->view('pages/admin/footer'); } // МОДЕЛЬ function get_group($config, $offset){ $this->db->order_by("id", "desc"); $query = $this->db->get_where('group', array('type' => $config['type']), $config['per_page'], $offset); return $query->result_array(); } РЕЗУЛЬТАТ - все загружается как нужно, просто песня, а вот если передаю аяксом значение type в качестве переменной, то не черта не работает, и ошибка в аяксе исключена, все проверил + (повторюсь), если бы аякс передавал "битое" или пустое значение, то и в запросе к БД оно было бы пустое, то есть БД не вернула бы нечего, а она на оборот возвращает все( Мне кажется тут дело в том что страница загружается и контроллер принимает для выборки из БД те значение которые были у него в момент загрузки, а потом что бы в него не передавали, он на них забивает, вернее не то что бы забивает, он просто не перезапускает выборку из БД с новыми значениям, я даже уверен что причина именно в этом, но разобраться с ней я покуда не как не могу понять( --- Добавлено --- Вот для наглядности --- Добавлено --- как я и говорю если в условия выборки сразу передать значение то все будет ок, а если сначала загрузить страницу без ограничений на выборку, а потом передавать аяксом значения для ограничений выборки, то нечего не выйдет. Еще раз повторюсь, варинт с ошибкой при передаче по средствам аякса исключена, все проверенно и перепроверено 1000 раз
делал уже) существует переменная, и равна тому чему должна быть равна, то есть, если выбираю новости то $post[type] == новости, если товар то $post[type] == товар в таблице поля type тоже соответствуют
@smartCreate может где кирилица вкралась? непоможет скорее всего но как на счёт empty --- Добавлено --- ну если вырезать проверку и скрипт выполняет сортировку то гдето баг с проверкой условия --- Добавлено --- есть предположение что гдето напутано с порядком вызова функций попробуй $config['type'] = $_POST['type']; вынести в первую строку скрипта
не, кирилицы нету сделал как ты говоришь, пофиг.. и еще одно доказательство тому что скрипт выполняет проверку правильно, вот скрин, на нем видно что $config['type'] = $_POST['type'] я вынес в самый верх, а print_r($config['type']) сделал в конце условия, в итоге скрипт мне показал значение news, то есть все ок --- Добавлено --- Мне правда кажется что дело в самой "политике" загрузки, то есть скрипт мой делает следующее (при первой загрузке): 1) конектится к базе; 2) выбирает от туда все; 3) считай количество строк что бы создать пейджер; всю эту инфу передает во вьювер вот здесь: PHP: $this->data['post_array'][1] = $this->admin_model->get_group($config, $this->uri->segment(3)); $this->load->view('pages/admin/head'); this->load->view('pages/admin/heading', $this->data); $this->load->view('pages/admin/footer'); А потом когда я передаю контролеру переменную для выборки, он все проделывает, но вот как раз эту часть: PHP: $this->data['post_array'][1] = $this->admin_model->get_group($config, $this->uri->segment(3)); $this->load->view('pages/admin/head'); this->load->view('pages/admin/heading', $this->data); $this->load->view('pages/admin/footer'); уже не трогает, потому что это часть отвечающая за загрузку страницы, а мне получается нужно что бы он её как раз трогал..., может есть какие то идеи на этот счет?
@smartCreate не пойму как так-то здесь вижу только такой шаг,- в каждом условии каждой функции написать $res=."1...9" и вывести результат, поможет отсечь логическую ошибку от синтаксичесской оплошности --- Добавлено --- не думаю, на столько грубая ошибка должна была быть выявлена ещё на этапе проектирования, хотя пхп мир безграничных возможностей)))))))
Про безграничные возможности это конечно правда)) Не совсем понял тебя про $res..., можешь обьяснить?
@smartCreate ну сделать типа дебага, в помещать в переменную последовательность выполнения функций и условий затем её вывод. типа Код (Text): function load_heading() { if (isset($_POST['type'])) { echo 'load_haed,условие истинно';
Как говорила наша учительница математики в школе, "Если смешать клубнику и сапоги, получится рвотный порошок". Новости - это новости, товары - товары, зачем мешать в одной таблице? По сабжу - надо выводить запросы, которая составляет программа, и смотреть, как они отрабатывают в phpmyadmin. Судя по коду, для этого заглянуть под капот фреймворка (я не работал с ним, поэтому не знаю точно, как получить запрос, который он составил, но SQL-запросы всегда отлаживаются одинаково)