На время проведения реконструкции сайт переведён в режим "ТОЛЬКО ЧТЕНИЕ" (Read only). Приносим свои извинения!
MaxHub
Полезности по Maxsite CMS

Улучшение "Популярных статей"

Вопросы-ответы / 25 марта 2015

В продолжение комментария о плагине "Популярные статьи". В данном плагине запрос к БД осуществляется с помощью кода:

$CI = & get_instance();
$CI->db->select('page_slug, page_title, page_id, page_view_count, page_date_publish');
$CI->db->where('page_status', 'publish');
$CI->db->where('page_view_count > ', '0');
if ( $options['page_type'] ) $CI->db->where('page_type_id', $options['page_type']);
$CI->db->where('page_date_publish <', date('Y-m-d H:i:s'));
$CI->db->order_by('page_id', 'desc');
$query = $CI->db->get('page');

Как добавить условие, чтобы выборка осуществлялась только из конкретной рубрики?

В плагине "Последние публикации" подсмотрела, что условие выбора рубрики осуществляется с помощью кода:

$CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id', 'left');
$CI->db->where_in('cat2obj.category_id', 'XXX');

Как его интегрировать в "Популярные записи"?

Комментариев: 6
  1. Катя, так просто код не соединить, ибо надо немного переделать php-код формирования запроса, чтобы происходила декларация таблицы с алиасом page. А так то вы верно нашли фрагмент с join.

  2. Илья, подскажите пожалуйста, как переделать? "Метод тыка" тут не проходит...

  3. Катя, примерно такой код.

    Оригинальные строки кода плагина закомментированы.

    $CI = & get_instance();
     // $CI->db->select('page_slug, page_title, page_id, page_view_count, page_date_publish');
     $CI->db->select('page_slug, page_title, page.page_id, page_view_count, page_date_publish');
     $CI->db->where('page_status', 'publish');
     $CI->db->where('page_view_count > ', '0');
     if ( $options['page_type'] ) $CI->db->where('page_type_id', $options['page_type']);
     $CI->db->where('page_date_publish <', date('Y-m-d H:i:s'));
     $CI->db->order_by('page_id', 'desc');
     // $query = $CI->db->get('page');
     $CI->db->from('page');
     $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id');
     $arg['include_cat'] = array(1,4); // выводим для 1й и 4й категории, нужно прописать как опцию 
     $CI->db->where_in('cat2obj.category_id', $arg['include_cat']);
     $query = $CI->db->get();
  4. О! Спасибо, searchingman!!! Вы как всегда, в своем репертуаре, все на высоте! =))) Думала, что вы забросили уже давно maxsite. Приятно, что не покидаете нас =)))

    Код проверен, работает!

  5. Катя, решил перенести сюда ваш вопрос к материалу.

    Вообще идея такая: выводить плагин на 2 типах страниц - на главной и на страницах рубрик. Для главной все понятно, работает в дефолтном режиме. А вот для рубрик желательно, чтобы популярные записи показывались только из этой рубрики.
    Другой вопрос по алгоритму плагина. Он выводит популярные записи в зависимости от количества просмотров? За какой период он считает количество просмотров?

    Очень интересная задача. Но я пока не вникал в работу плагина популярных статей. Нужно время на ответ. Я так понимаю, что часть ответа вы уже получили от searchingman. Уточните, что ещё нужно?

    ЗЫ: Прошу прощения, что отвечаю с задержкой - реально много работы, а ваши вопросы как всегда требуют сил и времени на формулирование ответа, которых увы не так много grin

    ЗЗЫ: Если у вас получилось реализовать плагин для обозначенной задачи, то хорошо бы выложить в паблик, а то и вообще добавить правки в дистрибутив...

  6. Какой способ подсчета количества просмотров выбрать? http://s017.radikal.ru/i431/1504/8a/293e82324b21.png