Простая, по идее, задача, но что-то я не соображу, как ее реализовать. Требуется: Вывести страницы с определенной меткой, принадлежащие к определенной категории.
Т.е. нам нужно сделать выборку сначала по категории, а затем из выбранного выбрать страницы с требуемой меткой.
Стандартные возможности mso_get_pages() позволяют нам либо вывести страницы категорий (без учета меток в выборке), либо страницы меток (без учета категорий в выборке). А нужно, чтобы учитывались оба параметра, и принадлежность страниц к категории, и наличие у страниц метки.
Как лучше реализовать на практике?
4 3484
Еще записи по теме
- Вопрос по логин-форме
- Где искать стили шапки шаблона d3?
- Есть ли влияние плагина «Mobile Theme» на рейтинг в поисковых системах?
- Как заставить плагин perelinks не дублировать ссылки, которые есть в контенте?
- Поиск текста из description
- Где можно указать произвольные CSS стили для default-шаблона?
- Всплывающая форма с фильтром в select


Михаил, думаю, что просто за счёт передачи определённого набора значений параметров в функцию mso_get_pages() не получится сделать выборку.
Посмотрел \application\maxsite\common\page.php (думаю, что ты и сам его видел) и там видно, что при варианте выборки для custom_type = 'category' или custom_type = 'tag' там выполняются специальные процедуры с соответствующими (заточенными под конкретные задачи) запросами к базе.
Если и есть вариант как то объединить запросы, то только если попробовать воспользоваться параметром function_add_custom_sql, который задаёт название специальной функции. Эта функция должна добавлять параметры выборки (т.е. нужна работа с экземпляром $CI).
Собственно, я и реализовал таким образом. Проблема моя была в том, что я ранее ни разу не использовал этот параметр, а рабочих примеров в Сети найти не мог. Методом тыка надыбал искомое.
В моем случае я брал за основу tag, получал таким образом в mso_get_pages() выборку по тегу, а затем с помощью function_add_custom_sql из полученной выборки отбирал уже страницы, относящиеся к той или иной нужной мне рубрике.\
Сама фунцкия такая:
function plus_cat() { $CI = &get;_instance(); $cat_id = АЙДИ_НУЖНОЙ_КАТЕГОРИИ; if ($cat_id) // указаны рубрики { $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id', 'left'); $CI->db->join('category', 'cat2obj.category_id = category.category_id'); $CI->db->where_in('category.category_id', $cat_id); } }И, соответственно, mso_get_pages() получила вид:
// параметры для получения страниц $par = array( 'limit' => mso_get_option('limit_post', 'templates', '7'), 'cut' => mso_get_option('more', 'templates', tf('Читать полностью »')), 'cat_order' => 'category_name', 'cat_order_asc' => 'asc', 'type' => false, 'custom_type'=>'tag', 'meta_key'=>'tags', 'slug'=>mso_segment(3), 'content' => $full_posts, 'function_add_custom_sql' => 'plus_cat' );Я использовал в качестве слага для выборки по тегу mso_segment(3), у других это может быть что-то другое.
Михаил, в коде всё выглядит именно так, как я теоретизировал
Потребность явно нестандартная, поэтому примеров особо нет в сети. Но теперь есть
Михаил, спасибо, что поделился наработкой!
Пожалуйста. Думаю, что function_add_custom_sql многим интересна, но далеко не каждый к ней подход может найти. Поэтому свой код с пояснениями привел.