mso_get_pages и типы данных в MaxSite CMS: что это и как эти штуки связанны.
mso_get_pages и типы данных в MaxSite CMS: что это и как эти штуки связанны.
Вопрос, который можно считать классическим:
Я хочу, чтобы статьи в обратном порядке выводились не на mysite/home, а на mysite/news.
Поэтому, перенес содержимое home.php в news.php.
Почему по адресу mysite/news выводит 404 ничего не найдено? Что за хрень?
Признаюсь, я сам поначалу долго не мог пройти эту головоломку.
А сейчас мне эта головоломка не интересна и надоело отвечать на подобные вопросы. Поэтому решил написать один раз и сюда отсылать.
Для того чтобы понять, что к чему, рекомендую взглянуть на содержимое функции mso_get_pages.
Для получения чего-либо из БД функция использует SQL запросы (а вы что дуиали?). Для каждого жизненного случая нужны данные, сформированные определенным образом (тип данных).
Вот, в зависимости от необходимого типа данных, mso_get_pages и формирует запросы.
Рассмотрим участок кода
- ….
- # для каждого типа страниц строится свой sql-запрос
- # мы оформляем его в $CI, а здесь только выполняем $CI->db->get();
- // если указана кастомная функция, то выполняем r1
- if ( $r['custom_func'] and function_exists($r['custom_func']) ) $r['custom_func']($r, $pag);
- elseif ($r['custom_type']) // указан какой-то свой тип данных - аналог is_type
- {
- $custom_type = $r['custom_type'];
- if ( $custom_type == 'home' ) _mso_sql_build_home($r, $pag);
- elseif ( $custom_type == 'page' ) _mso_sql_build_page($r, $pag);
- elseif ( $custom_type == 'category' ) _mso_sql_build_category($r, $pag);
- elseif ( $custom_type == 'tag' ) _mso_sql_build_tag($r, $pag);
- elseif ( $custom_type == 'archive' ) _mso_sql_build_archive($r, $pag);
- elseif ( $custom_type == 'search' ) _mso_sql_build_search($r, $pag);
- elseif ( $custom_type == 'author' ) _mso_sql_build_author($r, $pag);
- else return array();
- }
- elseif ( is_type('home') ) _mso_sql_build_home($r, $pag);
- elseif ( is_type('page') ) _mso_sql_build_page($r, $pag);
- elseif ( is_type('category') ) _mso_sql_build_category($r, $pag);
- elseif ( is_type('tag') ) _mso_sql_build_tag($r, $pag);
- elseif ( is_type('archive') ) _mso_sql_build_archive($r, $pag);
- elseif ( is_type('search') ) _mso_sql_build_search($r, $pag);
- elseif ( is_type('author') ) _mso_sql_build_author($r, $pag);
- else return array();
- ….
Функция знает только типы данных: home, page, category, tag, arhive, search, author.
И, если тип данных не указан явно, функция определяет тип данных из первого сегмента url-а.
Везде в шаблоне, при вызове функции, тип данных не объявляется явно, поскольку функция вызывается из страниц с 1-м сегментом, который известен функции.
Если же, вы вызываете функцию со страницы mysite/news, то ничего не получите.
Потому что самая последняя строчка в приведенном выше коде- else return array();
Возможные вопросы
И что же нам делать?
Явно указать тип данных, например
- $r['custom_type'] = ‘home’ ;
Какой тип данных из известных системе выбрать для своего случая?
Тот, который наиболее подходит.
Что делать, если не один тип данных не подходит?
Указать свою функцию SQL запроса
- $r['custom_func'] = ‘my_sql_build’;
Зачем вообще нужна эта дурацкая функция? Я сам сделаю простой запрос и все получу.
Можно и так, но mso_get_pages делает много различных вкусных штук, о необходимости которых вы даже не подозреваете.
Поэтому, используйте mso_get_pages и спите спокойно.
Добавление полей Сайт и Ник в форму комментирования для комюзеров в MaxSite CMS
В статье пойдет речь о том, как и зачем добавить в форму комментирования ...
Вывод всех меток в виде дерева для сайта на MaxSite CMS
В предыдущей статье на эту тему Вывод меток сайта деревом я пытался ...
Страница-форма регистрации для MaxSite CMS
В MaxSite CMS есть два вида пользователей: users и comusers, информация о которых ...
Классификация пользоательских метаполей и способов их вывода для MaxSite CMS.
MaxSite CMS позволяет к существующим полям страницы добавлять произвольные ...
MaxSite плагин ABC-catalog 1.1.
Добавил некоторые возможности. Архив плагина: abc_catalog-1-1.zip Раньше настоящий ...










