Meruert в качестве программной основы

y_9de96549.jpg

Как уже говорилось в главе «Meruert без блога», в системе есть несколько шорткодов, которые позволяют в нужном месте выводить динамическое содержимое без знания языков программирования, а простой вставкой коротких кодов, которые просто нужно запомнить.

Кроме упомянутых, есть ещё несколько шорткодов, которые позволяют формировать необходимое содержимое:

[parcelle:year] или [parcelle:y] выводят текущий год: 2017.

[parcelle:range:ГОД] или [parcelle:from:ГОД] — диапазон дат, причём если год указан текущий, то будет выведен только он, а если один из прошлых, то появится указание диапазона дат. Например, [parcelle:from:1987] выведет на экран 1987–2017. Это удобно использовать при указании авторских прав на сайтах.

[parcelle:engine] выведет полное название CMS: Meruert 7.

[parcelle:enginelink] сформирует для нижней части страницы текст с указанием CMS.

[parcelle:sitecopy] сформирует для нижней части страницы текст со ссылкой на главную и названием сайта. Этот и предыдущий шорткод вы можете видеть при редактировании нижней части страницы начиная с 5 версии Меруерта.

[parcelle:version] выведет версию Меруерта (в нашем случае — 7).

[parcelle:currentPage], или [parcelle:currentpage], или [parcelle:currentpage], или просто [parcelle:current] — полный адрес текущей страницы: http://meruert.com/cms-meruert-as-a-framework/

[parcelle:server] — полное имя сервера с указанием протокола.

[parcelle:tags] — сформированный список тем, который можно использовать на любой странице, в боковой колонке и т.п.

[parcelle:children] — выводит список вложенных страниц, если они есть. Это касается только тех страниц, у которых указана альтернативная часть адреса (например, about вместо автоматически генерируемого post-3 или contacts вместо post-17). Если данная страница имеет альтернативный адрес company, а на сайте также присутствуют company/staff, company/history и company/partnership, то заголовки всех трёх будут выведены на месте указанного шорткода (благодаря слэшу между частями адреса система будет считать эти три страницы вложенными по отношению к первой).

Шорткодами, которые можно вставлять и в записи, и в окна редактирования фрагментов страниц, и в шаблоны, дело не ограничивается.

Систему можно расширять несколькими способами.

Например, если в папку Meruert положить папку autoload, а в неё файл с произвольным именем, то этот файл будет автоматически найден и выполнен до того, как будет загружена страница; поэтому там можно использовать дополнительные программные библиотеки, в зависимости от типа страницы выполнять рассылки или иные действия, которые вам теоретически могут понадобиться. Единственное ограничение — файлы выполняются в алфавитном порядке, т.е. сначала будет загружен /Meruert/autoload/end.php, а лишь потом /Meruert/autoload/start.php, и об этом следует помнить (или нумеровать файлы). В скриптах автозагрузки можно хранить что угодно, вплоть до сценариев соединения с базой данных, любых библиотек и т.п.

Далее, в Meruert можно использовать включаемые файлы, которые могут содержать программный код и выводить его в нужном месте (например, если вам требуется ещё одно меню или динамически генерируемые фрагменты). Для их хранения создайте в папке Meruert папку tiles, а в ней храните файлы с произвольными именами, но с расширением .php. Поскольку файлы предназначены именно для вывода информации, весь вывод нужно собирать в переменную $t (Меруерт прочитает содержимое этой переменной и выведет в нужном месте). Сам же вызов этих включаемых файлов («тайлов» в терминологии Meruert) осуществляется просто: [tile:ИМЯ], где ИМЯ должно соответствовать имени файла без расширения. То есть вызов [tile:menu2] подгрузит файл /Meruert/tiles/menu2.php и выведет содержимое, записанное в переменной $t этого файла. Тайлы также можно включать где угодно. Тайлы обрабатываются до шорткодов, которые описаны выше и в предыдущей записи.

По умолчанию после административного входа на сайт происходит переадресация на главную страницу. Однако, если в папке /Meruert/special/ будет находиться файл management.php, то в верхнем меню для администратора появится ссылка «Управление», а переадресация при входе будет происходить именно на эту страницу: предполагается, что это альтернативная страница для управления сайтом, на которой можно собрать и нужные ссылки, и статистику, и что угодно сверх этого.

Вообще же в папке /Meruert/special/ можно хранить любые динамические файлы с выводом в переменную $m. Это могут быть дополнительные динамические страницы с любым функционалом, но Меруерт не включает их в меню автоматически, как это можно делать с обычными записями (т.е. сделать ссылку на страницу, которая лежит в этой папке, нужно будет самостоятельно). Если у вас в /Meruert/special/ лежит файл something.php, то его вывод будет доступен по адресу ваш-сайт.com/something/, при этом вывод автоматически включится в используемый шаблон дизайна, как обычная страница.

К слову, обойтись можно и без шаблона: достаточно к адресу страницы добавить фрагмент ?ajax или ?naked (т.е. передать один из двух GET-параметров без значения), чтобы шаблон для страницы с таким адресом не использовался, а показывалось только его содержимое: это удобно для Ajax-вызовов.

На основе Меруерта можно построить и собственный фреймворк, используя систему как микроядро с основным функционалом. Для этого поместите в папку Meruert папку framework, а в ней создайте (по своему усмотрению) файлы run.php и routes.php. Первый из них предназначен для абстрактной логики вашего фреймворка, а второй для определения своих правил роутинга; при этом, если в файле routes.php определены новые правила запросов страниц, которые могут конфликтовать с тем, что есть в составе CMS Meruert, то рекомендуется определять константу Routed (т.е. define('Routed', TRUE);), и родные правила роутинга Меруерта будут отключены для данного запроса. 

 Меруерт обладает довольно большим набором хорошо отлаженных функций, которые можно использовать и вне самого движка, для его динамических страниц, в тайлах и собственном фреймворке — например, библиотека форм, конвертер изображений, средства безопасности. Наиболее важные функции с указанием параметров перечислены ниже (в квадратных скобках даются необязательные параметры):

protectDangerTexts(строка, [допустимые тэги]) очищает строку от потенциально опасных символов (для вывода пользовательских комментариев и т.п.)

trimslasher(строка) обрезает слэши по краям строки

xmler(строка, тэг, значение в случае пустого результата) возвращает содержимое указанного тэга из прочитанной строки, причём тэги без угловых скобок, а в случае вложенности через слэш: tag1/tag2

upXMLer(строка, массив с ключами и значениями или строка-ключ, [значение]) обновляет (но не записывает файл) так, что значения тэгов, переданные в ключах, обновляются значениями, переданными в качестве строк — значений ключей. Можно передать или одну пару ключ-значение (второй и третий параметры), или множество пар (массивом во второй параметр)

paragrafize(строка) корректно расставляет тэги абзацев в строке

recognizeLinks(строка) распознаёт ссылки в строке и снабжает их тэгами, если нужно

setURL(строка, [GET-параметр]) из адреса страницы без имени сервера и расширения делает корректный адрес страницы

setRedirect([адрес]) переадресует на страницу, указанную в качестве параметра; без параметра на главную страницу сайта

setRedirectRef() переадресует на предыдущую страницу (откуда пришли)

createMenu(ассоциативный массив ссылок и текстов ссылок, [тэг для выбранного элемента], [разделитель], [тэг вокруг каждого элемента], [префикс идентификаторов ссылок], [общий путь для ссылок], [1, если активный пункт меню нужно оставить ссылкой]) создаёт меню из массива (единственный обязательный параметр)

filereader(имя файла, [режим текстовый/бинарный]) читает содержимое файла в строку

filewriter(имя файла, строка, [вместо / до / после содержимого], [режим текстовый/бинарный]) записывает строку в файл

viewFolder(имя папки, [что читать: по умолчанию файлы, если 'd', то папки], [сортировать, по умолчанию по алфавиту]) читает содержимое папки

validname(имя файла) исправляет имя файла так, чтобы с ним не возникло проблем

fileUpload(ДАННЫЕ, папка, [валидировать имя], [изменять имя при наличии файла с таким же именем, по умолчанию нет, просто перезаисать]) загрузка файла на сервер (под ДАННЫМИ понимается массив $_FILES['строка'])

convertImages(в папке, из файла, [новое имя], [сделать шириной], [сделать высотой], [префикс для имени файла], [качество, обычно максимальное]) преобразует изображение из заданного файла, причём способно не только изменять размеры (по обоим разрешениям или по одному заданному пропорционально) и сохранять в нужном месте под нужным именем, но и конвертировать из формата в формат

equalizer(строка) читает последовательность строк типа «ключ = значение» в массив

dateBasedCached(имя файла) снабжает имя файла суффиксом вида ?2012....., где после вопросительного знака следует слитно написанная дата последнего обновления файла, что предотвращает нежелательное кэширование браузерами, например, таблиц стилей

f_elem(строка) оборачивает элемент формы в блок

f_elem_set(лейбл, массив из элементов формы) создаёт блок с общим заглавием и несколькими элементами формы

f1(идентификатор, [страница — цель отправки], [метод, обычно POST]) генерирует начальный тэг формы

f_required(строка) помечает найденный в строке элемент формы как обязательный

f_submit([слово]) генерирует кнопку отправки формы, обычно с надписью «Сохранить»

f2([слово]) генерирует финальный тэг формы с кнопкой отправки формы

f_text(имя, [лейбл], [значение], [не редактируемое, по умолчанию редактируемое]) генерирует однострочное текстовое поле

f_password(имя, [лейбл], [значение]) генерирует поле для пароля

f_hidden(имя, [значение]) генерирует скрытое поле

f_file([имя], [лейбл]) генерирует поле для загрузки файла

f_files([базовая часть имён полей]) генерирует набор из поля для загрузки файла и ссылки, по щелчку по которой открывается новое поле для загрузки файла (добавлять поля можно бесконечно в рамках разумного смысла)

f_textarea(имя, [лейбл], [значение]) генерирует многострочное текстовое поле

f_check(имя, [лейбл], [отмечено ли, по умолчанию нет], [не редактируемое, по умолчанию редактируемое]) генерирует флажок (поле для галочки)

f_checkbox(имя, [лейбл], [отмечено ли, по умолчанию нет], [не редактируемое, по умолчанию редактируемое]) — полный синоним для предыдущего

f_select(имя, [лейбл], массив с ключами и строками, [выбранный ключ], [размер в строках], [возможность множественного выбора]) генерирует элемент формы — выпадающий список

f_radio(имя файла, массив с ключами и строками, [выбранный ключ]) генерирует набор из переключателей (radio buttons)

captcha([суффикс]) генерирует капчу

captcha_check([суффикс]) проверяет, верно ли введено значение в капчу, и если да, то возвращает единицу

authForm() возвращает форму авторизации

composeMail(на адрес, тема письма, текст письма) отправляет электронное письмо с сайта

generateUniCode() генерирует уникальный код (для уникальных идентификаторов записей, но можно использовать и в своих целях)

humanifyDate(дата в MySQL-формате) трансформирует полученную дату в нормальную на человеческом языке

reduceText(строка, [количество символов, по умолчанию 250]) обрезает текст до указанного количества символов, причём никогда не обрезает посреди слова, а аккуратно следует до пробела и добавляет многоточие, если нужно.

Приятного использования!


Комментарии