Внимание! Данная запись отмечена как устаревшая и/или потерявшая актуальность! Возможно автор уже передумал и теперь придерживается другой точки зрения, нежели изложенная в тексте ниже.

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

MaxSite CMS / Создание своего сайтаПросмотров: 10119 (142)

Часто типы страниц путают с типом данных. Стандартно в 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(), которая присутствует во всех типах данных.


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

Комментариев: 24 RSS

2AntonOFF31-05-2011 06:46

Во как!

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

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

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

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

4MAX26-06-2011 10:46

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

5Константин Бегтин01-07-2011 22:43

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

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

7MAX02-07-2011 08:10

$par = array( 'limit' => mso_get_option('limit_post', 'templates', '15'), 
   'cut' => mso_get_option('more', 'templates', 'Читать полностью »'),
   'cat_order'=>'category_id_parent', 'cat_order_asc'=>'asc', 'type'=> false, 'content'=> $full_posts, 
   
   'custom_type'=>'home', 
   'type'=>'book',
   'order' => 'page_title',
   'order_asc' => 'asc',
   
    );

8Константин Бегтин02-07-2011 12:15

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

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

9MAX02-07-2011 18:22

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

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

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

10Константин Бегтин02-07-2011 18:32

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

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

11MAX02-07-2011 18:41

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

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

12Константин Бегтин02-07-2011 19:04

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

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

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

13MAX02-07-2011 19:16

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

15Константин Бегтин04-07-2011 11:45

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

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 были видны при редактировании только страниц этого типа? Как вариант: как добавить с меню пункт «Создать новую книгу»

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

16MAX04-07-2011 13:23

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

18MAX04-07-2011 17:58

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 выводится для всех записей. В принципе было бы интересно подумать как сделать шаблоны для новых страниц, основанных на типах, но там сложность в том, что автору нужно заранее знать тип страницы. Тогда вроде бы можно было делать запись по предусмотренному шаблону.

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

22Денис Скрипник11-10-2013 12:29

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

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

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

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

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

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

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

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

23MAX11-10-2013 12:42

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

24Денис Скрипник12-10-2013 15:51

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

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

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

Оставьте комментарий!

Комментарий будет опубликован после проверки. Вы соглашаетесь с правилами сайта.

(обязательно)

О сайте

Здесь вы получите самую полную информацию о создании сайтов на MaxSite CMS.

Рейтинг@Mail.ru