Вторник, 13 февраля 2018 00:02

MODx Revo основы

Автор
Оцените материал
(0 голосов)
Неожиданно для себя публикую материал об основах работы в системе modx, больше, конечно же, как шпаргалка, но в тоже время как отдельный мартериал. 

Modx - даже не знаю как назвать, CMF или CMS - условимся, что это все же фреймворк, т.к. в "голом" виде, по сути, лишь gui для работы, словно cms на минималках. Рассматриваем с бэкэнда. Ресурсы - по сути страницы, которым задается тип и шаблон. Шаблон ресурса - тело страницы сайта с базовой разметкой. Чанк - куски html кода в шаблонах. Сниппет - куски php кода для вызова в чанк. Обычно в снипетах уже указывается в какой чанк передавать, в самом чанке, который обычно называют tpl.названиеснипета переменные выводятся как [[+name]]. Можно в шаблонах вызывать только снипет, если он необходим или в нем код, который выводит единые данные. Например мне нужно было вывести из БД данные, я все это вывел в снипете и просто его подключил к шаблону - чанк тут не нужен, правда с точки зрения идеологии так делать моветон. Еще есть плагины, которые как ни крути - плагины.

Грубо говоря страница сайта на modx - это Ресурс на шаблоне в котором чанк из снипета. Простейший пример шапка сайта и подвал - чанки header и footer, важные скрипты - include и т.д. В менеджере все можно структурировать по подпапкам\категориям, что удобно. Любой шаблон может содержать параметы, которые называют как TV (проще говоря - дополнительное поле в шаблоне или ресурсе). 

Собрав воедино данные полученные из хабра и документации modx имеем:

теги для работы в шаблонах и чанках:

Вначале, которые часто используются:

[(site_name)] – название сайта
[(site_url)] – адрес сайта
[[*pagetitle]] – заголовок документа
[[*description]] – описание документа
[[*introtext]] – аннотация документа
[[*content]] – содержимое документа
[[*alias]] – псевдоним документа
[[*id]] – идентификатор (номер) документа
[[~id]] – URL указанного документа
[[*type]] – вариант (документ, папка или ссылка)
[[*parent]] – номер (ID) родительского документа
[[*contentType]] – тип содержимого (например, text/html)
[[*isfolder]] – является ли документа папкой (

[[*ПараметрTVилиполе]] – выводит значение параметра в документе.
[[$Чанк]] - вызов чанка (к слову сказать так вызывается только в revolution).
[[!Сниппет!]] (кешируемый или не кешируемый) – вызов сниппета. Если предусмотрены параметры, например опции какого-либо дополнения, то
[[!Сниппет?
&параметр=`значение`]
[[+Переменная+]] – обращение к переменным в чанках для снипетов (они же плейсхолдеры)

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


Можно добавлять и комментарии где угодно так [[# комменатрий]]

Кстати, самое приятно в modx возможность сохранения документа через Ctrl+S без перезагрузки страницы с очищением кеша

Теперь поговорим о снипетах (я до сих пор не знаю как правильно - сниппет или снипет, поэтому буду варировать)

вызов в сниппете ресурс $modx->getObject('modResource', ID); 

$resource->get

Чтобы передать в переменную чанка значение из снипета 

$test = $modx->getChunk('NameChank', array(
'testname' => $testname,
));

Ну и соответственно в чанке

Занчение поля, [[+testname]]

Далее я опишу приложения, которые для меня оказались базовыми и перейду к работе с БД через xPDO

Ace - редактор кода с подсветкой, завершением тегов, дублированием строк и т.д. аки добрый notepad++
AdminTools - набор полезных булочек для разработчика, где есть возможность делать заметки (только сохранять нужно по кнопке) и добавлять в избранное
Articles - для ресурсов
Console - ооооооооооооооооооОчень важная вещь. выводит консоль для отладки php кода в админке. Можно проверять свои писанины без публикаций, главное не забывайте добавлять вначале
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);
для вывода ошибок. При построении запросов и вывода, очень помогло. Прям очень очень.
controlErrorLog - выводит в модальном окне журнал ошибок и предупреждение
debugParser - снипет, который выводит, что тормозит в системе только админу (контекст mgr)
Gallery - галерея
GetPages, GetResources, GetUrlParam - Тоже понятно
pdoTolls - очень важный пакет, погуглите все возможные ключи, которые он выводит
и еще куча важных, но для этой статьи ненужных дополнений, которые созданы для авторизации и сжатия избражений.

Про настройки modx писать не буду, их много и каждый под себя.

Важно понимать, что в modx практически все на массивах, но с ними работать приятно и через минут 10 изучения мануалов, уже разбираешься что и куда

Итак, к таблицам принято обращаться через классы. Все построенно на классах. Вот полезная таблица стандартных таблиц и их названия, для запросов:

 

Название таблицыНазвание класса
access_actions modAccessAction
access_actiondom modAccessActionDom
access_category modAccessCategory
access_namespace modAccessNamespace
access_context modAccessContext
access_elements modAccessElement
access_templatevars modAccessTemplateVar
access_menus modAccessMenu
access_policies modAccessPolicy
access_policy_templates modAccessPolicyTemplate
access_policy_template_groups modAccessPolicyTemplateGroup
access_permissions modAccessPermission
access_resources modAccessResource
access_resource_groups modAccessResourceGroup
actions modAction
actiondom modActionDom
actions_fields modActionField
active_users modActiveUser
categories modCategory
categories_closure modCategoryClosure
site_htmlsnippets modChunk
class_map modClassMap
content_type modContentType
context modContext
context_setting modContextSetting
context_resource modContextResource
dashboard modDashboard
dashboard_widget modDashboardWidget
dashboard_widget_placement modDashboardWidgetPlacement
site_element modElement
element_property_sets modElementPropertySet
system_eventnames modEvent
fc_profiles_usergroups modFormCustomizationProfileUserGroup
fc_profiles modFormCustomizationProfile
fc_sets modFormCustomizationSet
lexicon_entries modLexiconEntry
manager_log modManagerLog
menus modMenu
namespaces modNamespace
extension_packages modExtensionPackage
site_plugins modPlugin
site_plugin_events modPluginEvent
property_set modPropertySet
site_content modResource
documentgroup_names modResourceGroup
document_groups modResourceGroupResource
site_script modScript
session modSession
site_snippets modSnippet
system_settings modSystemSetting
site_templates modTemplate
site_tmplvars modTemplateVar
site_tmplvar_contentvalues modTemplateVarResource
site_tmplvar_access modTemplateVarResourceGroup
site_tmplvar_templates modTemplateVarTemplate
users modUser
membergroup_names modUserGroup
member_groups modUserGroupMember
user_group_roles modUserGroupRole
user_group_settings modUserGroupSetting
user_messages modUserMessage
user_attributes modUserProfile
user_settings modUserSetting
workspaces modWorkspace

 

таблица отсюда

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

if(!$modx->addPackage('название', $modx->getOption('core_path').'путь до компонента и модели', '')) {
return 'невозможно загрузить';
}

запросы делаются так 

$query = $modx->newQuery('Класс');


далее мы смотрим условия какие нам нужны, например:

$query->where(array(
'id' => '$userid',
));

сортировка

$query->sortby('поле','DESC');

ограничения

$query->limit(150);

самое страшное, с чем я намучался - Left Join , для него нам нужно сделать селект, через getselectcolums, а потом массивами делать =

$query->select(array($modx->getSelectColumns('Таблица1', 'Таблица1'),$modx->getSelectColumns('Таблица2', 'Таблица2'),$modx->getSelectColumns('Таблица3', 'Таблица3','',array('поле1','поле2'))));

тут я беру все поля двух таблиц и выборочно третьей


$query->leftJoin('Таблица1', 'Таблица1', array('Таблица1.id =Таблица2.user'));
$query->leftJoin('Таблица3', 'Таблица3', array('Таблица1.id = Таблица3.id'));

подробно об этом в официальной документации - там же все стандартные запросы в modx

далее через getcollection делаем созданный нами запрос

$tvs = $modx->getCollection('Класс', $query);

$output ='';

foreach ($tvs as $k => $tv) {

$output .= $tv ->get('user');

}

print($output);

Различные условия:

Равно — $query->where(array('width' => 15));
Не равно != $query->where(array('width:!=' => 15));
Меньше > $query->where(array('width:>' => 15));
Больше < $query->where(array('width:<' => 15));
больше или равно >= $query->where(array('width:>=' => 15));
Меньше или равно <= $query->where(array('width:<=' => 15));
Like LIKE $query->where(array('width:LIKE' => '%15%'));
Not Like NOT LIKE $query->where(array('width:NOT LIKE' => '%15%'));
В массиве IN $query->where(array('width:IN' => array(15,16,17,20)));
Не в массиве NOT IN $query->where(array('width:NOT IN' => array(15,16,17,20)));
Равно NULL IS $query->where(array('width:IS' => null));

взято отсюда - кстати отличный сайт для новичков

Оттуда же - аякс запросы

if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}
if (empty($_POST['action'])) {return;}
$res = '';
switch ($_POST['action']) {
case 'helloWorld':
$res = 'Hello World!';
break;
}
if (!empty($res)) {
die($res);
}

На том же сайте разжеванно, что такое getcollection и примеры по любым запросам в снипетах

так же не мало важно ->prepare();, для формирования уже самого запроса. Еще про запросы.

Теперь про чанки. В чанках тоже можно использовать различные условия

например условия

[+numbooks:is=`5`:or:is=`6`:then=`Здесь 5 или 6 книг`:else=`Не уверен, сколько книг`]]

скрыть элемент, если условие верно 

[[+numbooks:lt=`1`:hide]]

А самое важное, можно выводить информацию о пользователе

[[!+modx.user.id]] - Выведет ID пользователя
[[!+modx.user.username]] - Выведет логин пользователя
Полное имя: [[!+modx.user.id:userinfo=`fullname`]]

и т.д. Огромный мануал по этому и всем фильтрам тут. Официально по пользователям - тут

 

 

Это пока первое, что пришло в голову сохранить себе на сайт в виде шпаргалок и полезных ссылок. остально еще добавлю. Ну и репозитории знаете же, основной для России - https://modstore.pro, основной для modx вообще - вот https://modx.com/extras/package/ (здесь вообще все дополнения, сортируйте по updated или downloads)

На справдливость и правильность кода выше не претендую, создаю больше для себя

 

Прочитано 45 раз Последнее изменение Вторник, 13 февраля 2018 04:05

Похожие материалы (по тегу)

Другие материалы в этой категории: « Bootstrap выпадающее меню и Joomla
created in 2006 year