LinkorCMS FAQ: Часто задаваемые вопросы по системе

В этом дополняющемся FAQ рассмотрены вопросы, которые наиболее часто задавались на оффициальном форуме системы. Хоть он и пишется для LinkorCMS v1.4, но большая часть ответов подходит и для версии 1.3. В противном случае различия будут оговариваться. Так же еще меньшая часть ответов действительна и для версии 1.2, но, по причине ее устаревания и почти не встречающейся в природе, она специально оговариваться не будет. Также будет рассмотрена некоторая культура поведения на форуме.

Последняя версия CMS на момент написания: 1.4.1.

Дата последнего редактирования FAQ: 19.08.2015.

Культура поведения на форуме

Описание модуля Страницы

В системе есть модуль для создания статических страниц (то есть таких, где просто отображается html текст без какой-либо серверной логики или PHP кода). Но, так как он объединен с редактором блока меню, то иногда вызывает вопросы у начинающих пользователей системы.

В модуле можно создать два типа записей: страницу и ссылку. Первая представляет собой статическую страницу, которая отображает заданный в ней текст во адресу /name.html или index.php?name=pages&file=name (где name - ссылка, указываемая при редактировании страницы) при его вызове. Вторая же является просто произвольной ссылкой в блоке меню. При этом, если вы хотите чтобы в блоке меню была ссылка на созданную статическую страницу, то нет необходимости создавать ссылку. Достаточно при редактировании страницы отметить соответствующую опцию.

Так же список ссылок и статей в модуле представляет из себя сортирующийся вложенный список того, как должен происходить вывод ссылок в блоке меню.

Подключение JS скриптов / галерей (лайтбоксы и подобные) / редакторов текста / встраивание счетчиков

Способы различны, все зависит от ваших целей, скриптов и версии системы.

Подключение JS скриптов

Javascript скрипты подключаются в HTML документах с помощью тега <script>, причем код скрипта может быть как ставлен в тег напрямую, так и указанием ссылки на файл с кодом.

Если необходимо вставить скрипт в заголовок элемента (секция <head>), то можно воспользоваться следующими методами класса шаблонизатора:

System::site()->AddJS($script);

System::site()->AddJSFile($filename, $local, $inc, $params);

Первый метод принимает всего один аргумент $script с текстом вашего скрипта, который будет вставлен в заголовок документа. Второй же метод предназначен для вставки файла со скриптом и имеет четыре аргумента: $filename - ссылка или адрес скрипта; $local логическая переменная, указывающая на то, что является ли файл локальным; $inc - вставлять ли скрипт ссылкой на файл с кодом или вставить в страницу код из файла (грубо говоря, актуально только для локального файла); $params - дополнительные аттрибуты для тега <script> при вставке файлом.

Если же необходимо вставить скрипт в тело документа (секцию <body>), то скрипт можно вставить напрямую в нужное место шаблона темы оформления. Если же шаблонизатор системы портит скрипт, ошибочно находя в нем свои теги, то можно окружить скрипт шаблонным блоком {noblocks}{/noblocks} (актуально для LinkorCMS v1.4), который отключает шаблонизацию HTML кода, окруженного этим блоком.

Так же можно создать шаблонную переменную с кодом вашего скрипта (что важно для LinkorCMS v1.3, где нет тега noblocks), используя следующий метод класса шаблонизатора:

System::site()->SetVar($Block, $VarName, $Value, $SubId = 0);

Он принимает следующие аргументы: $Block - имя шаблонного блока, в котором необходимо создать переменную (можно воспользоваться глобальным блоком template); $VarName - желаемое имя для вашей переменной; $Value - значение шаблонной переменной (в данном случае это должен быть код вашего скрипта); $SubId - ?.

Далее в нужном месте шаблона вызываете созданную шаблонную переменную как {page.name} и шаблонизатор в это место вставит ваш Javascript код (пояснения: page является алиасом template; переменные, созданные во вложенном блоке не могут использоваться в родительском, но так как template - глобальный блок, то в случае его использования на этот факт можно не обращать внимание).

Вставить вызов метода можно, например, в файл init.php темы оформления.

Так же скрипты можно вставлять в статические страницы и текстовые блоки в админ-панеле сайта, так как в них для разметки используется HTML без каких-либо граничений. В некоторых случаях, когда используется визуальный редактор, последний может вмешиваться во вставляемый код, что может изменить ожидаемый результат. В таких ситуациях стоит на время отключать визуальный редактор в разделе Расширения -> Плагины (или Плагины в LinkorCMS v1.3).

Встраивание счетчиков

Так как большинство счетчиков представляют гибрид HTML и JS кода (вставки прозрачной картинки 1x1 пикселей и JS кода для получения детальной информации), то для этого работает все то, что описано в предыдущем разделе.

Для встраивания счетчиков в существующий блок статистики, можно вставить их код в контентный шаблон блока Онлайн: /templates/ваша_тема/block/content/online.html.

Подключение сторонних визуальных HTML редакторов в админ-панель

*

Подключение галерей

*

Вставка PHP кода в шаблон / Встраивание сторонних скриптов в систему

Начиная с LinkorCMS v1.3, шаблонизатор при считывании шаблонов использует include, а не file_get_content(), так что PHP код в шаблонах вставляется просто с помощью PHP тегов:

<?php

echo 'Hello!';

?>

С помощью этого можно поставить скрипты бирж ссылок (Sape и подобные) и прочие на сайт. При подключении шаблона, скрипт исполнится и его вывод будет находиться в месте вставки.

Если же скрипт более сложный и принимает аргументы ("имеет несколько страниц"), то вставка в какие-то существующие страницы сайта может не подходить. В таком случае можно встроить скрипт как простейший модуль (тем более довольно часто такие скрипты выполняют функции, которые схожи с функциями модулей). Пример простейшего модуля можно скачать по ссылке: link11.

Дублирование (созданий копий) модулей / Изменение адреса модуля

Создать копии модулей возможно, но потребуется некоторое время для кропотливой работы и некоторые знания языка PHP. Вся суть сводится к созданию новой папки в папке modules с именем копии, а так же всех ресурсов модуля: таблицы в базе данных, настройки, шаблоны и прочее. Разве что шаблоны и скрипты могут остаться общими, если не требуется их изменение для корректной работы копии модуля или "подгонка" под сайт. Далее изменяется сам код модуля. Необходимо исправить все ссылки и места, использующие какие-либо ресурсы.

Переименование модуля можно считать частным случаем дублирования модуля. В таком случае достаточно переименовать папку с модулем и изменить все ссылки в нем. Какие-другие изменения могут не потребоваться, но в любом случае переименовать модуль проще, чем его скопировать (ведь он должен стать обособленным от своего родителя).

В процессе копирования модуля можно выделить его название в отдельную константу и написать инсталлятор/деинсталлятор (если его нет). В таком случае, при необходимости в будущем создать еще одну копию модуля, можно будет обойтись изменением константы и, к примеру, названия папки с ресурсами.

Описание шаблонизатора системы

В LinkorCMS используется шаблонизатор своей разработки, который имеет довольно простой синтаксис. Элементы последнего можно разделить на три группы:

Покажем на небольшом практическом примере

Строение тем оформления

Все темы оформления, предназначенные для пользовательской части сайта, имеют свою собственную папку в директории /templates/. В ней же располагается и тема default_admin, которая предназначается для админ-панели сайта (в LinkorCMS v1.3 эта папка отсутствует, а тема располагается в /base/admin/template/).

Установить тему для использования на сайте можно в разделе Общие настройки в админ-панеле сайта. Начиная с LinkorCMS v1.4, темы оформления считаются расширениями и должны иметь файл описания info.xml. При его отсутствии система не будет "видеть" вашу тему. Для предыдущих версий системы его наличие не требуется.

В комплекте с системой поставляются две темы оформления: IgrimTheme и default (появилась в LinkorCMS v1.3.4, а в v1.4 была переименована в default). Они довольно простые по строению и могут использоваться как основа для ваших тем или изучения строения тем оформления.

Каждая тема содержит следующие папки:

block - шаблоны с внешним оформлением боковых блоков

block/content - шаблоны, отвечающие за оформление контента боковых блоков

images - папка для изображений, которые используются в теме (так же часть изображений находится в папке /images/ в корне сайта)

java - папка для javascript файлов, используемых в теме (множество других скриптов, используемых системой, можно найти в папке /scripts/ в корневой директории сайта; но редактируйте их осторожно и только в случае крайней необходимости)

module - папка для шаблонов оформления модулей системы

style - папка с CSS файлами оформления темы

table - папка, содержащая файлы для построения таблиц шаблонизаторов (в LinkorCMS v1.4 оставлена для совместимости)

themes - папка, которая содержит альтернативные файлы общего шаблона оформления страницы, которые могут устанавливаться в админ-панеле для модулей вместо theme.html

Так же в корне папки с темой оформления содержатся следующие файлы:

404.html - шаблон страницы ошибки HTTP 404

alert_message.html - шаблон вывода ошибок в верхней части страницы

box.html - шаблон оформления центральных блоков (box'ов), который используется при выводе контента модулями

breadcrumbs.html - шаблон оформления для так называемых "хлебных крошек" или навигационной цепочке от корня сайта до текущей страницы

comment.html - шаблон оформления комментария

comment_form.html - шаблон оформления формы добавления комментария

edit_comment.html - шаблон оформления формы изменения комментария

footer.html - шаблон оформления футера (нижней части страницы, подвала) страницы; содержание шаблона подставляется шаблонизатором в переменную блока {page.footer}; файл может отсутствовать и обычно используется для разгрузки шаблона theme.html

header.html - шаблон оформления хейдера (верхней части страницы, шапки); содержание шаблона подставляется шаблонизатором в переменную блока {page.header}; файл может отсутствовать и обычно используется для облегчения шаблона theme.html

info.xml - файл с информацией о теме оформления

init.php - PHP код инициализации темы (например, подключение скриптов и файлов стилей, запускается однократно системой при обработке запроса

login.html - шаблон, используемый для отображения формы авторизации в центральном блоке

message.html - шаблон для вывода сообщений с помощью модуля Сообщения

navigation.html - общий шаблон для пагинатора постраничной навигации

navigation_item.html - шаблон элемента для пагинатора

no_access.html - шаблон для вывода установленного сообщения при закрытом сайте (offline mode)

out.html - шаблон для промежуточной страницы переадресации

theme.html - общий шаблон страницы

Список шаблонов стандартных модулей:

article.html - шаблон краткого показа статьи в списках

article_read.html - шаблон показа полной статьи на отдельной странице с комментариями и оцениванием

cat.html - единый шаблон показа списка категорий (его по умолчанию используют все модули)

cat_path.html - шаблон "хлебных крошек" при навигации по категориям (устаревний в v1.4?)

download.html - шаблон краткого показа файла в списках модуля файлового архива

download_full.html - шаблона показа полного файла на отдельной странице с комментариями и оцениванием

feedback.html - шаблон формы обратной связи

forms.html -

forms_list.html -

forums.html - общий список форумов

forum_delete_post.html -

forum_edit_post.html - шаблон формы создания/редактирования темы (при просмотре темы вставляется в forum_showtopic.html, а при редактировании отдельного сообщения используется самостоятельно)

forum_moderation.html -

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

forum_post.html - шаблон отображения сообщения в теме (используется при показе как всех сообщений в теме, так и одного сообщения)

forum_right.html - шаблон отображения таблицы с вашими правами в данном разделе (что вы можете там делать)

forum_showtopic.html - шаблон отображения сообщений в выбранной теме форума (используется как для отображения всех сообщений, так и одного определенного)

forum_statistics.html - шаблон отображения таблицы со статистикой всего форума или его раздела (количество тем, сообщений и так далее)

forum_topics.html - шаблон отображения списка тем в выбранной категории (форуме) с формой создания новой темы

gallery_image.html - шаблон отображения уменьшенного изображения в списках галереи

gallery_view.html - шаблон отображения полного изображения на отдельной странице с комментариями

guestbook.html - шаблон показа сообщения в гостевой книге

guestbookform.html - форма добавления нового сообщения в гостевой книге

mail.html -

mail_down_tab.html -

mail_mail.html -

mail_showid.html -

mail_showid_nav.html -

mail_topics.html -

news.html - шаблон отображения краткой новости в списках на сайте

news_full.html - шаблон отображения полной новости на отдельной странице с комментариями

news_preview.html - шаблон для отображения предварительного просмотра новости при ее создании/редактировании в админ-панеле

news_topics.html - шаблон отображения списка категорий новостей (они не вложенные, скорее как разделы или новостные каналы; так что отношения к cat.html не имеют)

page.html - шаблон отображения статической страницы, созданной в модуле "Страницы"

poll.html - шаблон отображения выбранного опроса с формой голосования и комментариями

polls_main.html - шаблон отображения списка созданных опросов на сайте

poll_result.html - шаблон отображения выбранного опроса с результатами голосования и комментариями

search_form.html - шаблон отображения формы поиска контента на сайте

search_results.html - шаблон отображения найденных результатов в ходе поиска

sitemap.html - шаблон отображения карты сайта

user_conditions.html - шаблон показа условия соглашения при регистрации пользователя

user_forgotpassword.html - шаблон формы восстановления пароля к аккаунту пользователя

user_form.html - шаблон формы регистрации и редактирования данных пользователя на сайте

user_info.html - шаблон страницы с информацией о пользователе (профиль пользователя на сайте)

user_list.html - шаблон списка всех пользователей, зарегистрированных на сайте

Вывод контента блоками (таблицей, сеткой) с помощью встроенных средств шаблонизатора

TODO

Не отображаются изменения после редактирования CSS или JS файлов

TODO

Выбор типа базы данных (файловая или MySQL)

Система для хранения контента и настроек может использовать два типа баз: файловая БД и MySQL. При использовании первой, система хранит все данные в файлах, не требуя наличия сервера MySQL и подключения к нему. По умолчанию все данные файловой БД лежат по пути /db/linkorcmsdb/ (указывается при установке системы). Каждая таблица имеет два файла: *.FRM содержит данные, находящиеся в таблице, а *.MYD - ее структуру и служебную информацию.

Не смоторя на простоту и независимость файловой БД, это имеет и минусы. Невозможно сделать быструю, мощную и надежную базу данных, которая бы являлась простой, написанной на PHP и не работающей в режиме сервиса (демона, службы).

В связи с этим, строго рекомендуется использовать в качестве базы данных MySQL при ее наличии, особенно в случае высоконагруженных порталов и/или больших объемов данных. Все платные, да и большинство бесплатных хостингов на сегодняшний день предоставляют базу данных MySQL, так что все меньше остается случаев, где использование файловой БД -это единственный выход использовать LinkorCMS.

Обнуление (порча) таблиц файловой БД / Не работает блок Онлайн, Аудит

Не смотря на то, что файловая БД улучшалось, все же остаются шансы на то, что какая-то таблица может быть повреждена или обнулена. Обычно это происходит на нагруженных записью таблицах вроде online, данные которой обновляются при каждом запросе к системе, а так же файлы Аудита (им производится запись действий администраторов в админ-панеле).

Довольно часто данный дефект проявляется как неработоспособность блока Онлайн, что является следствием повреждении таблицы online.

Решается проблема восстановлением таблиц из резервной копии, а при ее отсутствии - из базы данных установщика системы (чистые таблицы хранятся в /setup/bases/). Так же можно перейти на использование базы данных MySQL.

Конвертация между файловой базой данных и MySQL

Сконвертировать файловую базу данных в MySQL можно с помощью установщика системы. Для этого достаточно на установленной системе LinkorCMS v1.4 удалить файл блокировки /config/setup_lock.php и выбрать "Конвертировать БД".

Для LinkorCMS v1.3 необходимо скопировать БД сайта (по умолчанию располагается в /db/linkorcmsdb/) в папку с базой установщика (/setup/bases/). Далее в инсталляторе совершить установку системы на БД MySQL и бросить процесс на шаге создания администратора.

Конвертация базы данных MySQL в файловую БД возможен, но скрипта-конвертера для этого процесса не существует (и мало практического смысла этой операции).

Не создаются новые блоки на LinkorCMS v1.3

Довольно частая проблема связана с установкой расширения от Lemur'а, позволяющее настраивать на каких страницах показывать блоки, а на каких - нет. Дело в том, что это расширение добавляет в таблицу blocks два новых стобца (showin и showin_uri) и при удалении расширения путем замены модифицированных файлов модуля blocks на стандартные будет происходить ошибка в INSERT запросе из-за несоответсвия столбцов. Для корректного и полного удаления модификации, необходимо удалить и эти столбцы. После этого ошибка с созданием новых блоков пропадет.

Использование ЧПУ, когда веб-сервером является не Apache

Этот вопрос не касается случаев, когда в качестве бэкенд сервера используется Apache, а в качестве фронтенд - какой-то другой (например, nginx), так как фронтенд сервер будет просто проксировать запросы от клиента к бэкенд серверу и для системы никакой разницы в окружении не будет.

Оригинально система рассчитана на использование веб-сервера Apache и ЧПУ правила, находящиеся в файле .htaccess, написаны именно под него. Но нет никаких серьезных ограничений, не позволяющие использовать LinkorCMS под другими веб-серверами. Главное реализовать аналогичные правила в имеющемся веб-сервере.

Для веб-сервера nginx можно пользоваться следующими правилами:

server {

listen 80;

server_name primer.ru;

root /var/www/primer.ru;

index index.php;

location = /.htaccess { deny all; }

location = /favicon.ico { log_not_found off; access_log off; }

location = /robots.txt { log_not_found off; access_log off; }

location ~ .(js|css|png|jpg|jpeg|gif|ico)$ { access_log off; }

location ~ ^/(db|log|.git|cache|backup|config) { deny all; }

location ~ ^/(?!admin.php|index.php|rss.php|setup.php).*.php$ { deny all; }

location / {

if (!-e $request_filename) {

rewrite ^/index.html$ /index.php last;

rewrite ^/(.*)$ /index.php?ufu=$1 last;

break;

}

}

location ~ .php$ {

fastcgi_split_path_info ^(.+.php)(/.+)$;

fastcgi_pass unix:/run/php5-fpm.sock;

fastcgi_index index.php;

include fastcgi_params;

}

}

Для веб-сервера Lighttpd (цитата из сообщения пользователя Forwarder с оффициального форума системы):

Так как Lighttpd не понимает .htaccess, то для запуска LincorCMS в Lighttpd необходимо сделать следущее: 1.Включить mod_rewrite в файле конфигурации lighttpd.conf, убрав перед ним знак #. 2.В конец файла lighttpd.conf записать следующее:

url.rewrite-once = (

"^/(.*).(css|js|php|jpg|png|gif|.htm|.html)$" => "$0",

"^index.html$" => "index.php",

"^/?(backup|images|blocks|modules|plugins|scripts|templates|set

up|uploads|errorpages|/..php)." => "$0",

"^/(.*)$" => "/index.php?ufu=$1"

)

Для IIS можно найти модули, позволяющие использовать правила расширения mod_rewrite Apache, который используется системой для реализации ЧПУ. Но работа ЧПУ под этим веб-сервером не проверялась.

Вопросы про ограничение размера загружаемых файлов системой

*

Модули

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

Находятся все модули в папке /modules/ в корневой директории сайта, причем каждый модуль имеет свой каталог (например, /modules/news/). В папке с модулем находятся следующие PHP файлы:

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

admin.php - администраторская часть модуля, предназначенная для работы в админ-панеле, которая доступна только администраторам сайта; так же является точкой входа модуля, но только уже в админ-панеле (может отсутствовать, если модуль не имеет административной части)

init.php - файл инициализации модуля, который исполняется системой до исполнения index.php модуля и подключения шаблонизатора (фактически после базовой инициализации системы; файл может отсутствовать; не действует для админ-панели)

info.php - файл с информацией о модуле, который используется системой при поиске неустановленных модулей (может отсутствовать, если модуль уже установлен; обычно такое налюдается у модулей, которые идут в дистрибутиве вместе с самой системой LinkorCMS)

info.xml - файл с информацией в формате XML, введен в v1.4 (в шаблонах используется, в модулях пока не замечен?)

В точках входа index.php и admin.php для пользовательской части и админ-панеле управления обычно в начале происходит так называемый роутинг адресов (обычно с помощью конструкции switch). То есть определяется нужная функция-обработчик для текущего запроса. Про строение адресов и работу системы ЧПУ рассказано в "*".

Дальше располагаются функции, обрабатывающие запрос, функции-рендеры и вспомогательные. Строение сильно может варьироваться в зависимости от функций и масштаба модуля, хотя и имеет общие черты, описанные выше.

С системой модуль может взаимодействовать через системный класс System. Он был введен в LinkorCMS v1.4 для того, чтобы отказаться от глобальных переменных $site (объект шаблонизатора пользовательской част сайта), $user (объект класса пользователей), $config (массив настроек модулей и системы до 1.4), $db (объект для работы с базой данных), $admin (объект шаблонизатора администраторской части сайта), $cache (объект для работы с кэшем).

Класс System не совсем равнозначно заменяет глобальные переменные. Например, для работы с настройками предлагается использовать методы вместо прямой работы с массивом. Так же в нем есть методы для работы с логом системы и вывода ошибок.

Начиная с LinkorCMS v1.4, существует новая возможность построения модулей. В ней вместо традиционного роутинга с помощью switch и нескольких функций, предлагается создать класс с методами. А в комментариях к методам указать правила роутинга. Самим роутингом и вывовом нужных методов дальше займется класс System.

Блоки

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

Находятся все блоки в папке /blocks/ корневой директории сайта. Каждый блок имеет свою подпапку для хранения PHP файлов с кодом модуля. Обычно у блока имеются следующие файлы:

index.php -

constructor.php - используется для вывода дополнительных полей настройки блока при редактировании блока (может отсутствовать, если дополнительных настроек для блока не требуется)

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

info.php - файл с информацией о блоке, который используется системой при поиске неустановленных блоке (отсутствует в системах до v1.4)

install.php - файл с кодом установки блока, который исполняется при установке блока (отсутствует в системах до v1.4)

uninstall.php - файл с кодом удаления блока, который используется при удалении блока (отсутствует в системах до v1.4)

Системы до версии 1.4 не поддерживают установку и удаление блоков. Установленные блоки должны быть зарегистрированы в таблице blocks подобно модулям (у них используется таблица modules), но, в отличии от последних, штатных способов установки/удаления блоков в них не было реализовано. Проводить установку/удаление блоков в этих системах необходимо или вручную, или с помощью внешнего PHP скрипта (как правило, их код представляет собой инициализацию ядра системы и последующий запуск кода, который аналогичен install.php/uninstall.php для 1.4).

Плагины

Действие плагинов, в отличии от модулей и блоков, довольно разнообразное. Их можно разделить на несколько видов:

Все плагины находятся в папке /plugins/ в корневой директории системы. Плагины находятся каждый с своей папке, плагины из групп находятся в подпапке соответстующей группы.

Плагины имеют следующие PHP файлы:

index.php - файл с кодом плагина, является точкой входа

info.php -

install.php - файл, который исполняется при активации (установки) плагина

uninstall.php - файл, который исполняется при деактивации (удаления) плагина

!!!TODO

Работа ЧПУ

Системная реализация ЧПУ появилась только с версии 1.3.4. До этого лишь некоторые модули самостоятельно его реализовывали.

Работа ЧПУ устроена следующим образом. Для поддержки системы ЧПУ, многие ссылки обрабатываются перед выводом с помощью функции ядра:

Ufu($Url, $Ufu, $NavLink, $NavParam, $MinOrder);

Она принимает следующие параметры: $Url - обычная не ЧПУ ссылка (используется для вывода при отключенной системе ЧПУ, а так же из нее берутся GET параметры для составления ЧПУ ссылки), $Ufu - шаблон ЧПУ ссылки **

При обработке ссылки, происходят многие вещи. Это можно посмотреть в файле ufu.php, который является модулем ядра. Если кратко, то проверяется наличие шаблоны для данной ссылки в талице rewrite_rules. Если ее нет, то происходит разбор ссылки, добавление в таблицу, сброс кэша, построения готовой для вывода ссылки.

При запросе к системе, веб-сервер должен передавать все запросы к сайту, за исключением некоторых реально существующих папок. Этот запрос должен быть передан системе как GET параметр ufu. Далее система в своей точке входа после базовой инициализации вызывает функцию ядра UfuInit(), которая запускает разбор запроса и пытается преобразовать ЧПУ ссылку по уже разобранным правилам в таблице rewrite_rules в обычные GET параметры.

Как видно, система ЧПУ является некой надстройкой, которая появилась в LinkorCMS v1.3.4.

Файлы и папки дистрибутива LinkorCMS

Стандартный дистрибутив LinkorCMS v1.4.1 содержит следующие папки:

backup - папка для резервных копий базы данных, которые создаются в админ-панели и при некоторых других операциях

base - папка, содержащая основной код системы LinkorCMS

blocks - папка, содержащая код боковых блоков, которые могут отображаться на сайте (подробнее смотрите в разделе "Блоки")

cache - стандартная папка для хранения кэшированных данных классом LmFileCache

config - папка с конфигурационными файлами системы; содержит и файл init.php для инициализации LinkorCMS

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

errorpages - содержит стандартные HTML страницы ошибок HTTP протокола; отдаются веб-сервером согласно настройкам .htaccess

images - содержит различные изображения, которые используются системой; преймуществленно это те, которые мало относятся к шаблону сайта

log - содержит файлы логов, создаваемые системой

modules - содержит модули системы, которые позволяют отображать контент на сайте и реализовывать другую функциональность (подробнее в разделе "Модули")

plugins - содержит несистемные плагины, которые позволяют расширять или изменять функциональность LinkorCMS (описание смотрите в разделе "Плагины")

scripts - содержит различные JavaScript скрипты и библиотеки; кроме JS файлов могут содержаться и другие файлы (например, PHP или CSS), реализующие дополнительный функционал и связки

setup - директория, содержащая код инсталлятора LinkorCMS; помимо установки, он содержит код обновления до новых версий и конвертации файловой БД в MySQL.

templates - содержит шаблоны оформления для сайта и админ-панели

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

Стандартное ядро системы LinkorCMS v1.4.1 содержит следующие модули:

access.php - функции, связанные с защитой и уровнями доступа

admin.php - функция контрола выбора и загрузки изображения, а так же для вывода почтовых адресов в админ-панели

ajax.php - функция для определения XMLHttpRequest запросов и кодировки/декодировки массивов в/из JSON

array.php - некоторые функции для манипуляции с массивами; активно используются при работе с файловой БД

audit.php - содержит две функции: добавление нового действия администратора в лог аудита, добавление нового реферала (перехода с другого сайта) в таблицу referers (отображаются так же в модуле Аудит)

autoload.php - функции для обработки автоподключения PHP классов

bbcode.php - функции для парсинга BBCode (точнее трансляции в HTML для отображения)

comments.php - функции для регистрации таблицы комментариев модуля, обновления данных пользователя в его существующих комментариях, удаления всех комментариев пользователя, обновления счетчика комментариев у объекта (например, новости), функции для создания/редактирования/удаления комментариев (используются модулями)

config.php - функции для работы с настройками системы, которые хранятся в базе данных сайта

database.php - различные функции, используемые при работе с базой данных; львиная доля функций используется файловой БД для своей работы

datetime.php - функции, относящиеся к работе с датой и ее текстовым представлением, часовыми поясами

email.php - функции для проверки Email адреса на корректность, системная функция для отправки письма, вывода Email адреса

errors.php - функции для обработки ошибок, замены стандартного error handler'а

extensions.php - функции для работы с расширениями (модули, плагины, блоки, шаблоны): установка/удаление/получение информации, добавления/удаления ссылки на модуль в меню админ-панели

filesystem.php - различные удобные функции для работы с файловой системой (получение списка файлов в директории, расширения файла и так далее)

forms.php - различные функции для обслуживания форм в админ-панели; функция загрузки изображения с созданием превью

images.php - функция для получения версии GD и создания превью изображений

libs.php - функция подключения библиотек из папки /base/lib/

location.php - различные функции для редиректа, проверки ссылок, получения и сохранения реферера, папки и домена сайта, отдачи страницы с ошибкой HTTP 404.

plugins.php - функции для получения информации об установленных плагинов и подключение их к системе

plugins_system.php - функция для подключения системных плагинов к системе

rating.php - функция получения файла изображением оценки какого-либо объекта (например, файла) по пятибальной шкале

reflection.php - функции для получения аннотаций классов, рабочающие через механизм reflection; используются для работы модулей, которые написаны в новом ООП стиле

request.php - функции для работы с запросом: фильтрация пришедших значений, проверка на наличие ключей в GET/POST, проверка на метод запроса и прочее

scripts.php - функция для подключения скриптов из папки /scripts/, а так же вспомогательные

search.php - функции для поиска слов в строках; используются поисковыми плагинами модуля Поиск

smilies.php - функция парсинга смайлов в тексте

string.php - различные полезные функции для работы со строками

translit.php - функции для прямого и обратного транслитирования текста

ufu.php - функции, организующие работу системы ЧПУ: инициализация, парсинг и добавление шаблонов перезаписи ссылок, генерация ЧПУ ссылки

url.php - функция обрезки указания протокола у ссылки и функция вывода ссылок на сайте (отображает внешние ссылки через редирект в том случае, если последний включен в настройках сайта)

user.php - множество полезных функций, связанных с пользовательскими аккаунтами

utf8.php - конвертирование строк и массивов между кодировками CP1251 и UTF8

Так же стандартная система LinkorCMS v1.4.1 содержит следующие файлы в папке /base/inc/:

admin_template.class.php - класс AdminPage, отвечающий за страницы в админ-панеле (точки входа /admin.php); основывается на PageTemplate

forms.inc.php - функции, относящиеся к генерации форм и ее элементов

html.class.php - класс HTML, генерирующий HTML код некоторых объектов; часто используется при создании форм

index_template.class.php - класс Page, отвечающий за страницы в пользовательской части сайта (точки входа index.php); основывается на PageTemplate

LmEmailExtended.php - класс LmEmailExtended, создание и отправка писем

LmFileCache.php - класс LmFileCache, кэширование различной информации в виде на диске

logi.class.php - класс Logi, создание и запись логов

messages.inc.php - функции для отображений сообщений на сайте (в центральной колонке)

navigation.class.php - класс Navigation, реализация постраничной навигации (пагинации)

page_template.class.php - класс PageTemplate, базовый класс страницы; основывается на Starkyt

picture.class.php - класс TPicture, позволяющий производить множество манипуляций над изображениями (является оберткой над GD)

posts.class.php - класс Posts, выводит комментария, отображает форму добавления/редактирования, сохраняет форму, удаляет комментарии

rss.class.php - класс RssChannel, предназначен для генерации RSS ленты

starkyt.class.php - класс Starkyt и вспомогательные, является низкоуровневым классом шаблонизатора LinkorCMS; производит разбор и компиляцию шаблонов, генерацию результирующей страницы

system.class.php - класс System, является важным звеном, которое позволяет получить доступ к объектам класса страницы, базы данных и других функций; так же является средством от ухода от глобальных переменных для доступа к объектам системы

tree.class.php - класс Tree, содержит базовые методы реализации функционала деревьев (вложенных категорий)

tree_a.class.php - класс AdminTree, содержит методы для функционала деревьев, которые специфичны для админ-панели

tree_b.class.php - класс IndexTree, содержит методы для функционала деревьев, которые специфичны для пользовательской части сайта

url.class.php - класс Url, служит для построения ссылки

user.class.php - класс User, польностью обрабатывает сессию текущего пользователя, проверяет доступ, дает различную информацию и многое другое

В папке /config/ находятся следующие файлы:

autoload.php - файл, содержащий информацию о системых классов для автозагрузки и список файлов ядра LinkorCMS; не предназначается для модификации

autoload_user.php - пользовательский список для новых классов и модулей ядра

autoupdate.php - скрипт автоматического обновления в рамках подверсий LinkorCMS (минорные обновления осуществляются через инсталлятор)

config.php - глобальные конфигурационные константы (использовать ли кэширование, системная локаль, включение режима разработки (отладки), режим сборки ядра, минимальная версия PHP и другое)

db_config.php - файл с данными доступа к базе данных (файловой и MySQL)

init.php - файл инициализации LinkorCMS; задает глобальные переменные, подключает конфиг-файлы, ядро (собранное готовое/по модулям/собирает сам), подключет системные плагины, задает системный обработчик ошибок, выполняет подключение к базе данных, инициализирует сессию пользователя, подключает часть несистемных плагинов

name_config.php - пути к различным директориям и файлам

system_build.php.cache - собранное ядро в один файл

version.php - информация о текущем дистрибутиве CMS

В корневой директории дистрибутива LinkorCMS v1.4.1 находятся следующие файлы:

admin.php - точка входа в админ-панель; производит инициализацию системы, проверяет права доступа (если нет прав - показывает страницу авторизации), инициализирует шаблонизатор (точнее класс AdminPage), определяет запрошенный модуль и пытается его подключить (в случае успеха - управление передается ему), после возврата управления осуществляет рендеринг и отдачу страницы с помощью AdminPage

index.php - точка входа в пользовательскую часть сайта; производит инициализацию LinkorCMS и системы ЧПУ, проверяет сайт на закрытость (оффлайн режим/режим обслуживания), определяет запрошенный модуль, подключает функцию инициализации модуля и передает управление ей (если существует файл с ней), производит инициализацию шаблонизатора (если разрешено; точнее производится инициализация класса IndexPage), производит инициализацию сообщений (если разрешено), передает управление самому модулю, после возврата управления производит рендеринг и отдачу страницы (если разрешено), передает управление функции финализации модуля (если она существует)

rss.php - точка входа в RSS ленту новостей; файл производит инициализацию LinkorCMS, генерацию и вывод RSS ленты новостей

setup.php - точка входа в инсталлятор LinkorCMS

Пояснения по созданию форм с помощью модуля "Веб-формы"

Локализация (переводы LinkorCMS на другие языки, мультиязычные сайты)

Официально переводов LinkorCMS на другие языки не существует. Так же поддержка локализаций (и тем более мультиязычности) отсутствует: текст разбросан по всей CMS без отделения от кода и шаблонов (за исключением модуля форума и других, которые были созданы разработчиком Lemur).

Но проблем с переводом на другие языки в CMS нет. На LinkorCMS существуют не русскоязычные сайты, где перевод CMS на другой язык был осуществлен создателями самого сайта.

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

Еще немного может ограничивать то, что система используется 8-битную кодировку CP1251. Но это касается, как правило, только экзотических языков (вроде китайского), где использование 8-битной кодировки невозможно. Но перевод системы на UTF8 вполне возможен путем небольших правок. Это все так же подтверждают реально сайты.

Но если перевод CMS осуществить вполне возможно, то создать мультиязычный сайт без серьезной доработки CMS вряд ли возможно. В случае необходимости создания мультиязычного сайта на LinkorCMS можно посоветовать лишь создать несколько копий по количеству используемых языков.

Восстановление доступа (пароля) к администраторскому аккаунту вручную

В первую очередь, можно воспрользоваться стандартной формой восстановления пароля на сайте: /index.php?name=user&op=forgotpass. Если это невозможно и есть физический доступ к сайту, то можно прибегнуть к ручному редактированию базы данных.

В случае использования базы данных MySQL, необходимо с помощью какого-либо инструмента (например, phpMyAdmin) подключиться к БД сайта, найти таблицу prefix_users (где prefix_ - префикс для таблиц сайта, указанный при установке системы), затем найти строчку с вашим аккаунтом и изменить поле pass.

В поле pass содержится md5 хэш вашего пароля аккаунта. Обратите внимание, что это не исходный пароль и хэширование не имеет никакого отношения к шифрованию (то есть, восстановить оригинальный пароль можно разве что перебором хэшей; да и к одному хэшу может относиться множество паролей (коллизия)). Например, паролю "admin" будет соответствовать хэш "21232f297a57a5a743894a0e4a801fc3" (можно поставить временно другой или сгенерировать свой новый хэш, например, любым онлайн генератором хэшей md5).

В случае использования файловой базы данных, необходимо аккуратно вручную отредактировать файл с данными указанной таблицы (/db/linkorcmsdb/table_users.FRM при данных установщика по умолчанию). В этом файле хранятся сериализированные данные с помощью стандартной PHP функции serialize(). Можно как десериализировать данные с помощью функции unserialize() и исправить индекс pass у нужной строки массива, так и найти поиском по своему логину место, где хранятся данные вашего аккаунта в сериализированном виде и изменить хэш пароля (он представляет собой характерный набор из 32 латинских символов и цифр). После чего сохранить изменения и продолжать пользоваться аккаунтом ( предварительно сменив временный пароль на постоянный с помощью штатной процедуры смены пароля, если поступали таким образом).

Перед выполнением всех этих действий рекомендуется сделать резервную копию базы данных (особенно файловой БД). Данные для доступа к БД, а так же тип БД можно найти в конфигурационном файле /config/db_config.php.

Лицензия LinkorCMS, Удаление копирайтов

TODO