Бесплатная CMS для вашего сайта Разумная альтернатива WordPress

Используем типы страниц в MaxSite CMS

16-05-2011Reading time ~ 4 min.Roadmap 6200

Часто типы страниц путают с типом данных. Стандартно в MaxSite CMS тип данных определяется по URL. Например для рубрик используется префикс category (http://сайт/category/XXX), для меток - tag (http://сайт/tag/XXX), для страниц - page (http://сайт/page/XXX) и т.п.

Тип страниц же задаётся в админ-панели. Изначально присутствует два типа blog и static, но без проблем можно добавить другие типы. Страницы типа blog предназначены для вывода на главной странице и в лентах записей, например рубрики, метки и т.п. Тип static предназначен для тех записей, которые не должны быть выведены в таких лентах. Обычно это некая фиксированная «статичная» страница, например «О себе», «Контакты» и т.п. Доступ к таким страницам осуществляется по прямой ссылке, которые как правило размещают в меню или сайдбаре.

Для обычных блогерских задач типов «blog» и «static» вполне достаточно. В самом простом варианте типы страниц используются для дополнительной группировки. Например с помощью виджета «Последние записи» можно организовать вывод определенного типа. Когда таких записей немного, то они все располагаются в сайдбаре. Если же статей много, то необходимо задать вывод в шаблоне сайта.

Предположим мы хотим на сайте организовать какой-то отдельный тематический раздел (например book). В этом разделе записи будут выводиться обычной лентой (как в рубриках), только в алфавитном порядке.

Для начала сделаем в админ-панели новый тип book. Настройки основные - Типы страниц:

Создание типа страниц в MaxSite CMS

Обратите внимание, что удалить тип страниц нельзя.

Теперь при создании или редактировании записей можно будет выбрать тип book.

Выбор типа страниц при редактировании записи

Сделаем пару записей для теста с этим типом и, чтобы убедиться в полной работоспособности, разместим виджет последних записей.

Далее в настройках виджета указываем тип страниц.

Виджет MaxSite CMS последние записи

После этого можно убедиться, что виджет появился в сайдбаре сайта.

Теперь давайте разберёмся как выводить book-записи на отдельной странице. Для этого есть несколько вариантов. Мы остановимся на создании отдельного типа данных - book. То есть наши записи будут выводиться по адресу http://сайт/book. Адрес может быть произвольным - он никак не связан с типом страниц.

Поскольку записи будут выводиться как в рубриках, то скопируем файл type/category.php из default-шаблона в type-каталог своего шаблона. Переименуем файл в book.php. MaxSite CMS автоматически сопоставит book в адресе с файлом book.php.

Если перейти на http://сайт/book, то увидим 404-страницу. Это происходит из-за того, что в файле получается тип данных book - тип данных, который не определен по-умолчанию в системе и для него неизвестен алгоритм получения страниц. Исправляется это очень просто. Открываем файл и находим строчку

...
// параметры для получения страниц
$par = array( ...

Это массив, в котором следует указать нужные нам параметры.

Добавляем ключи:

...
'custom_type' => 'home', 
'type' => 'book',
'order' => 'page_title',
'order_asc' => 'asc',
...

Первый ключ указывает алгоритм, по которому формируются SQL-запросы. У нас обычный вариант, как на главной, поэтому ставим home. Второй - указывает на тип страниц.

Поскольку мы хотим выводить записи по алфавиту, то задаём order (поле сортировки) и order_asc (порядок).

Обновляем страницу и видим, что book-записи прекрасно выводятся.

Правда, поскольку у нас исходный файл от вывода рубрик, то в «наследство» мы получили и некоторые блоки от рубрик. Нет особой сложности в том, чтобы удалить блок «category_show_rss_text». В блоке «category-show-desc» можно вывести какое-то своё описание book-записей. Также нужно будет добавить в mso_head_meta() свои значения для title.

С точки зрения MaxSite CMS между типами страниц нет никакой принципиальной разницы. Всё дело только в том, как организовать их получение и вывод записей. Самый простой - связать по адресу. Получение же страниц - стандартная функция mso_get_pages(), которая присутствует во всех типах данных.


Спасибо за идею статьи Александру Шиллингу! Вы также можете предложить свой вариант.

Related Posts
Comments (24) RSS
1 Anonymous 2011-05-16 17:13:25

Максим, спасибо за статью!


2 AntonOFF 2011-05-31 06:46:13

Во как!

А я на днях думал уже на это тему!

Спасибо, что подсказали.


3 Дмитрий 2011-06-25 20:11:54

Но если действовать данным способом,то в сайдбаре все равно ссылка идет http://сайт/page/statya, а не http://сайт/book/statya,то есть получается дублирование страницы, в чем смысла нет


4 Anonymous 2011-06-26 10:46:49

Потому что для записей в системе используется тип данных page. Если требуется скрыть в адресе page, то для сайдбара нужно предусмотреть свой виджет, где формируются ссылки по своим правилам. Для вывода же конечной страницы достаточно в type_foreach-файле page-mso-get-pages.php указать тип получаемых страниц.


5 Anonymous 2011-07-01 22:43:15

А у меня не вышло :(

На последнем этапе вместо записей о книгах появляются старые записи. Причём одна запись типа book туда попала... А две других, сделанных ранее, нет. Версия 0.53


6 Anonymous 2011-07-01 22:44:22

А можно привести полностью блок $par?


7 Anonymous 2011-07-02 08:10:49
$par = array( 'limit' => mso_get_option('limit_post', 'templates', '15'), <br>   'cut' => mso_get_option('more', 'templates', 'Читать полностью »'),<br>   'cat_order'=>'category_id_parent', 'cat_order_asc'=>'asc', 'type'=> false, 'content'=> $full_posts, <br>   <br>   'custom_type'=>'home', <br>   'type'=>'book',<br>   'order' => 'page_title',<br>   'order_asc' => 'asc',<br>   <br>    );

8 Anonymous 2011-07-02 12:15:13

Наверное я торможу, но никак не соображу, как сделать вывод в несколько колонок, типа http://news.swarog.ru/books/

И ещё, Книга это структурированный объект с полями. Есть ли возможность организовать ввод данных в книгу как заполнение формы, где текст - одно из полей? Куда копать?


9 Anonymous 2011-07-02 18:22:05

Несколько колонок делается так: вводится счетчик записей и по нечетным это одна колонка, по четным другая. Если вывод табличный, то попарно раскидываем в ячейки одной строки. Если это div'ы, то вначале выводим N/2 записей в одном блоке, остальные во втором.

Есть ли возможность организовать ввод данных в книгу как заполнение формы, где текст - одно из полей?

Проще всего в meta.ini шаблона. Как вариант аля-forms.


10 Anonymous 2011-07-02 18:32:49

Так у меня даже options.ini не подцепляется, а где искать meta.ini даже и не знаю. В папке шаблона лежат, скопированы из default. Иногда промелькнёт пункт «настройка шаблона» но туда не пускает, и он исчезает сразу :(

Собственно, задача стояла так: на плоских файлах, благо у меня есть самопис для работы с ними, сделать хранилище текущих книг, которые есть в продаже. Их вряд ли будет больше сотни. В DLE я сделал через настраиваемые поля записи, а тут такие есть? И как до них добраться?


11 Anonymous 2011-07-02 18:41:15

Где промелькнёт? Кто не пускает?

Примеры: meta.ini - default шаблон. Опции - clouds.


12 Anonymous 2011-07-02 19:04:55

Я сделал шаблон по Вашей инструкции (swarog.ru). Из default скопировал *.ini в папку шаблона. Как я понял, они должны подцепляться автоматически, и это отражается в админке появлением соответствующих пунктов меню. У меня они не подцепились, поэтому пришлось настройку меню перебросить в глобальный ini, что, конечно, некорректно.

Поскольку мне МАХ понравился, пытаюсь подогнать его под свои нужды.

Эх, если б он ещё без мускула работал, на одних файлах... Мечты :)


13 Anonymous 2011-07-02 19:16:58

Опции - это связка options.php и options.ini. См. Clouds. Meta.ini подхватываются автоматом.


14 Anonymous 2011-07-02 19:36:09

Спасибо, допёр


15 Anonymous 2011-07-04 11:45:08

Извините за навязчивость, есть ещё вопросы:

1)Как сформировать ленту для нового класса? По умолчанию выдаёт http://swarog.ru/book//feed, внутри пусто.

2)Внутри файла book.php полно хвостов от category. Как определить, какие из них нужны?

2.1) Наверное, логично, чтобы вместо category_name и др. работать с book_name. А где это определяется?

2.2) Можно ли связать с типом страницы стилевой файл, который подцеплялся бы автоматически?

3) В тексте book.php есть такие строчки:

if ($f = mso_page_foreach('info-top'))

{

require($f); // подключаем кастомный вывод

}

Смысл понятен, а где это кастомный вывод взять? В статье о нем ни слова не нашёл. :(

4) Как сделать, чтобы мета-поля типа book были видны при редактировании только страниц этого типа? Как вариант: как добавить с меню пункт «Создать новую книгу»

Извините за повторные посылки, редактор обрезал текст


16 Anonymous 2011-07-04 13:23:24

Отвечу чуть позже. Но судя по вашим вопросам вы решили поженить тип страниц и тип данных. Или опять их путаете. Не проще ли было в вашем случае сделать отдельный тип данных и от этого плясать?


17 Anonymous 2011-07-04 14:24:41

Может и так, я паскалист, для меня весь мир - тип данных :)


18 Anonymous 2011-07-04 17:58:20
1)Как сформировать ленту для нового класса? По умолчанию выдаёт http://swarog.ru/book//feed, внутри пусто.

Не класса, а типа данных. Если у вас не объявлен тип данных, подключится стандартный feed-home.php. Следовательно, в своём шаблоне сделайте этот type-файл - он и будет принимать управление выводом. Вся логика подключения в index.php шаблона.

2)Внутри файла book.php полно хвостов от category. Как определить, какие из них нужны?

Посмотреть по смыслу.

2.1) Наверное, логично, чтобы вместо category_name и др. работать с book_name. А где это определяется?

Вообще-то это поля из базы данных. Вряд ли там есть book_.

2.2) Можно ли связать с типом страницы стилевой файл, который подцеплялся бы автоматически?

Элементарно. В header.php смотрите тип страницы и по условию подключаете нужные стили.

Смысл понятен, а где это кастомный вывод взять? В статье о нем ни слова не нашёл. :(

В type_foreach-файле default шаблона. Но вообще это содержимое от объявления type_foreach-файла до конца foreach-цикла.

4) Как сделать, чтобы мета-поля типа book были видны при редактировании только страниц этого типа? Как вариант: как добавить с меню пункт «Создать новую книгу»

При создании записи неизвестен её будущий тип, или при редактировании он может смениться. Поэтому meta.ini выводится для всех записей. В принципе было бы интересно подумать как сделать шаблоны для новых страниц, основанных на типах, но там сложность в том, что автору нужно заранее знать тип страницы. Тогда вроде бы можно было делать запись по предусмотренному шаблону.

Правда, пока я не вижу в этом большого смысла.


19 Anonymous 2011-08-17 10:04:01

чтото не получается подключить(


20 Anonymous 2011-08-17 14:01:15

вчём именно у вас проблемма?


21 Anonymous 2012-05-08 19:25:08

Как можно вывести статичный текст в конкретной рубрике?


22 Anonymous 2013-10-11 12:29:12

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

1. Создал тип страниц "article".

2. Загрузил в папку type своего шаблона папку "article" с файлами, отвечающими за вывод страниц данного типа. адрес статей имеет вид адрессайта/article/названиестатьи.

Они открываются нормально.

3. Создал по инструкции в этой статье папку "articles", закачал туда папку и файл из shared/type/category, переименовал файл category.php в articles.php.

4. Заменил код по вашей инструкции, но почему-то статьи не выводятся - выводится ошибка 404.

Буду благодарен, если скажите, где ошибка: http://rghost.ru/49306864

Заранее спасибо.


23 Anonymous 2013-10-11 12:42:10

Значит что-то мешает получить список записей или таких записей нет. Посмотрите другие параметры mso_get_pages(), может что-то не так указали.


24 Anonymous 2013-10-12 15:51:14

Здравствуйте. Всё правильно, а mso_get_pages в файле articles.php один:

$pages = mso_get_pages($par, $pagination);

в units-файлах вовсе mso_get_pages нет.

Leave a comment!