В этот раз я не стану расписывать всё по командам и подетально (уж простите меня :), хотя позже когда будет время, то я это сделаю). Итак, для начала нам необходимо:
1) Создать нового пользователя и новую базу данных для CMS MODx (для удобства работы с базами данных я бы порекомендовал Вам установить PhpMyAdmin, а потом зайти в него и создать нового пользователя и новую БД с полными на неё правами).
2) Скачиваем с официального сайта http://modx.com/evolution свежую сборку данной CMS, затем разархивируем архив и переименовываем его, к примеру в просто modx.
3) Перемещаем данную папку modx в /var/www/ (это конечно если у Вас apache установлен по умолчанию без изменений, и если Вы устанавливаете его на локальный компьютер).
4) Набираем в браузере: http://your_ip/modx/install , где your_ip это внешний ip-адрес, или http://localhost/modx/install если Вы производите установку данного CMF на локальном компьютере, или http://your_web_adres/modx/install если Вы производите данную установку на арендуемом хостинге . Затем производим интуитивно понятную установку и первую базовую настройку.
TV-параметры в MODX Revolution
5) Вот и всё, эта замечательная CMS установлена. Для входа на сайт пишем: http://your_ip/modx, где your_ip это внешний ip-адрес, или http://localhost/modx если Вы произвели установку данного CMF на локальном компьютере, или http://your_web_adres/modx если Вы произвели данную установку на арендуемом хостинге. А для входа в админку http://your_ip/modx/manager, где your_ip это внешний ip-адрес, или http://localhost/modx/manager, или http://your_web_adres/modx/manager (если на хостинге Вы устанавливали MODx не в корень Вашей папки а создали отдельную папку с названием modx, а если сразу в корень устанавливали то тогда в браузере пишем http://your_web_adres/manager ).
Это основные шаги по установке MODx, далее при первом входе в админку Вам предстоит сделать немало настроек, но это того стоит. Удачного администрирования.
Share this:
Понравилось это:
Нравится Загрузка.
Похожее
This entry was posted on 21 июня, 2011 at 1:34 пп and is filed under Web. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
комментариев 6 to “Установка MODx Evolution в Ubuntu 10.04”
- Ильдар Says:
21 февраля, 2013 в 10:25 дп | Ответить После установки Modx на LAMP, во вкладке элементы управления, кроме вкладки шаблоны ничего нет, ни TV параметров, ни модулей, ни сниппетов, ничего. как быть? возможно это связано с правами доступа к папкам сайта, но перед установкой назначил права к папкам сайта 777. - ingener Says:
22 февраля, 2013 в 6:18 пп | Ответить Вы имеете ввиду что эти вкладки пустые, то есть просто пишет типа тв параметр, сниппет, и так далее, а внутри них пусто, или вообще нет ничего, то есть даже этих названий нет? Уточните вопрос Ваш, если их вообще нет, то есть даже пустых надписей, то возможно Вы что то неправильно сделали при установке. А если они есть, но пустые, то есть без каких либо данных, так это правильно, то есть так и должно быть. Ведь ТВ Параметры Вы сами должны создавать такие какие Вам нужно, а различные сниппеты и прочие пакеты Вам необходимо самому скачивать с репозитория ModX. Ведь создатели этого CMF не знают какие именно из пакетов Вам понадобятся, и чтобы не нагружать систему да и саму сборку CMF ModX специально оставили официальную сборку пустой. А скачать все необходимые пакеты можно прямо в админке ModX, что кстати очень удобно, а так же там есть краткое описание пакетов и руководство по использованию с примерами для каждого конкретно выбранного пакета. Надеюсь я понял Вашу проблему и смог на неё ответить. Удачи Вам в новых начинаниях! - Ильдар Says:
23 февраля, 2013 в 12:23 пп Наверное я не правильно обозначил проблему) Извените. В элементах управления вообще ничего нет, ни надписей сниппеты TV-параметры и т. д., вообще ничего нет.
Проблема заключалась в кодировке. Если устанавливать язык админки английский то все есть, все элементы управления, если же установить язык админки русский, то все пропадало. Попробывал заново перезалить Modx и понял, что проблема с кодировкой базы. Решил проблему след образом: http://www.1two.ru/ustanovka-modx-na-denver.html - ingener Says:
23 февраля, 2013 в 3:42 пп | Ответить Нда, весело Вам там приходится я смотрю ). Ну для начала переименуйте файл .htaccess на стандартный ht.access, а затем зайдите в админку и в настройках MODX отключите ЧПУ (человеко подобные урлы :)), и проверьте потом. То есть после этого переименовывайте назад ht.access на .htaccess, по идее всё должно работать. - Ильдар Says:
24 февраля, 2013 в 9:15 дп | Ответить Да уж, не то слово весело) Нашел в чем проблема.
не было подключено mod_rewrite. после его активации при переименовании файла ht.access в .htaccess все пошло нормально. - ingener Says:
24 февраля, 2013 в 9:56 дп | Ответить Ну это хорошо что всё хорошо. Теперь желаю удачного сайтостроения, ведь ModX — крутая CMF, и с ней очень всё легко и удобно делается.
TV-параметры в #MODX #Evolution #CMS
Источник: ingener.wordpress.com
Таксономия в modx revo (custom TV input)
Таксономия, поправьте, если я не прав, — это такой способ классификации и систематизации, при котором один объект может относиться к нескольким классам. Например, у нас есть терьер Тузик, овчарка Рекс, кот Барсик и рыбка Немо. И есть такая структура:
Тузик, будучи терьером, относится и к собакам, и к млекопитающим. То же самое с Рексом, он — собака и млекопитающее. Барсик относится к котам и млекопитающим, а Немо — рыба и млекопитающим не является.
Таксономия может быть очень полезна при разработке сайтов-каталогов, в которых один объект так же может относиться к нескольким категориям и группам категорий. Вот, например, каталог артистов. Артист может быть одновременно и музыкантом, и ведущим, и фокусником. Кроме того, музыку он может исполнять в различных стилях.
Таксономия «из коробки» имеется во многих CMS. Особенно хорошо этот термин знаком пользователям Drupal. Для моего любимого ModX существует плагин Taxonomies, но работает он. несколько странно. Надо что-то делать.
Начнем
Для начала создадим структуру каталога в дереве ресурсов. Для ресурсов в этой структуре нам понадобится отдельный шаблон — назовем его «section». Кроме того, шаблон понадобится и для объектов — назовем его «object».
Так как каждый объект каталога у нас может принадлежать к нескольким категориям, нет никакого смысла хранить объекты внутри категорий. Можно было бы, конечно, создать ресурс внутри одной из категорий, а в остальных сделать ссылку на него, но это, по-моему, извращение. Работать с таким каталогом будет очень не удобно. Поэтому для хранения объектов создадим ещё один ресурс, который будет нашей «Базой данных» 🙂 Чтоб не потеряться среди тысяч дочерних ресурсов «базы» имеет смысл воспользоваться плагином Collections.
Теперь нужно объекты из «базы» как-то привязать к структуре каталога. Причём каждый объект может быть привязан сразу к нескольким категориям. Более того, при выборе дочерней категории, было бы неплохо сразу отмечать и родительские — именно поэтому мы не можем использовать теги — у них нет структуры, они не бывают дочерними/родительскими. В принципе, мы могли бы создать отдельное TV с тегами для каждой группы категорий каталога. Тогда само TV обозначало бы группу, у которой были бы дочерние элементы — теги, но таких TV может получится слишком много, да и каждое TV — это лишние запросы в БД.
TV cо своими параметрами ввода
Итак, нам нужен TV, в котором будет храниться список родительских ресурсов, и нам нужен удобный способ редактирования этого списка. То есть нужен свой TV input. Я сделал такой:
Как делаются custom TV input? Нужно создать 4 файла:
- /core/model/modx/processors/element/tv/renders/mgr/input/taxonomytv.class.php — основной код на php, который передает данные в шаблон TV.
- /core/model/modx/processors/element/tv/renders/mgr/inputproperties/taxonomytv.php — вызов шаблона с дополнительными настройками TV.
- /manager/templates/default/element/tv/renders/input/taxonomytv.tpl — шаблон TV. Форма из смеси JavaScript, EXT.js и Smarty. Обрабатывает данные, полученные от taxonomytv.class.php. Здесь важны id элементов формы из которых modx получит обновленные данные.
- /manager/templates/default/element/tv/renders/inputproperties/taxonomytvprops.tpl — шаблон дополнительных настроек TV.
Я сделал эти файлы на основе стандартных TV инпутов: resourceList и checkbox.
Ещё раз. Я сделал TV «taxonomy» и назначил ему параметр ввода «taxonomytv», который является кастомным и скачать вы его сможете в конце статьи. Естественно, не забываем назначить TV для шаблона Object.
В настройках TV, во вкладке «параметры ввода» нам нужно указать id родителя структуры. Чекбоксы могут выстраиваться в несколько колонок. width-fix — костыль для правильного отображения чекбоксов, так как у модикса с этим есть некоторые проблемы — неправильно высчитывается ширина блока .x-column-inner. Если у вас не отображаются чекбоксы или колонки чекбоксов слишком широкие, попробуйте включить width-fix.
В параметрах вывода TV нужно выбрать тип вывода «разделитель» и в качестве разделителя указать ||.
Создаем новую запись в «базе» и видим структуру каталога в TV taxonomy. При выборе овчарки выбираются и собаки и млекопитающие — все родительские элементы. Выключаем чекбокс — выключаются родительские. Вложенность возможна бесконечная.
Фильтрация в getResources
Теперь в TV taxonomy хранится список id категорий, к которым принадлежит данный ресурс вида: id||id2||id3 . Для того, чтобы отобразить все ресурсы в данной категории, нужно задать фильтрацию по TV для getResources в шаблоне Section. В простейшем случае это делается так:
tvFilters=`taxonomy==[[*id]]||taxonomy==[[*id]]|%||taxonomy==%|[[*id]]||taxonomy==%|[[*id]]|%`
— получаем 8| или |8| или |8 , других вариантов быть не может.
Итак, у нас есть «база данных» — ресурс типа «Коллекция», где хранятся все наши записи. У нас есть структура каталога в виде дерева обычных ресурсов. И есть кастомный TV, чтоб присваивать записям «родителей» из структуры. В шаблоне каталога «section» у нас вызов getresources такого вида:
[[getResources? tpl=`object-list` includeContent=`1` processTVs=`1` tvFilters=`taxonomy==[[*id]]||taxonomy==[[*id]]|%||taxonomy==%|[[*id]]||taxonomy==%|[[*id]]|%` ]]
Здесь в качестве параметра parents указан id нашей «базы данных». В принципе, всё уже должно работать. При этом у нас в базе вполне может присутствовать Котопёс и он отобразиться в разделах: Кошки, Собаки и Млекопитающие.
Ссылки на разделы в шаблоне getResources
Не хватает отображения ссылок на родителей под каждой записью — по типу тегов. Если в чанке object-list (шаблон getResources) мы попытаемся отобразить тв, просто написав его название, то на выходе мы получим простую строку из id документов-родителей через разделитель ||. Нужно превратить эту строку из TV taxonomy в осмысленные ссылки на разделы.
Можно было бы написать сниппет, который разбивает строку из TV, ищет по каждому id нужный ресурс и формирует на него ссылку. Но в таком случае, при отображении каждой записи из «базы», для каждого «родителя» этой записи нам нужен был бы отдельный запрос к MySQL (или что у вас там). Более того, можно было бы сделать custom TV output, но у него были бы те же проблемы.
Поэтому я решил сделать 2 сниппета. Первый taxonomyString — вызывается один раз вместе с getResources и формирует строку со всем необходимым для создания ссылки из id в TV. Строка имеет вид: id_родителя1:pagetitle1==id_ресурса1||id_родителя2:pagetitle2==id_ресурса2 — и так для всех категорий каталога.
В качестве параметра taxonomyString принимает id корневого ресурса структуры каталога. Таким образом вызов getResources в шаблоне Section у нас становится таким:
[[!getResources? tpl=`object-list` includeContent=`1` processTVs=`1` tvFilters=`taxonomy==[[*id]]||taxonomy==[[*id]]|%||taxonomy==%|[[*id]]||taxonomy==%|[[*id]]|%` parent=`12`]]` ]]
Заметьте, что parents для getResources — это id базы, а parent для taxonomyString — id корня каталога.
По сути, код taxonomyString — это вызов getResources внутри getResources, так что если вы, например, хотите отображать «папки» категорий, вы можете убрать отсюда ‘hideContainers’=>’1’ .
Второй сниппет taxonomyLinks вызывается из чанка object-list (tpl getResources). Он принимает два параметра: tvs — это наш TV taxonomy и string — это строка от первого сниппета. В примере чанк object-list выглядит так:
[[+pagetitle]] [[!taxonomyLinks? tvs=`[[+taxonomy]]`]]
TaxonomyLinks как раз и занимается формированием ссылки из id, но при этом он не обращается к БД сайта, а берёт все необходимые данные из строки, полученной от taxonomyString. Каждой ссылке присваивается класс taxonomy и класс в зависимости от id группы: taxgroup5, taxgroup10 и т. д. Ссылка на текущую страницу заменяется span’ом с теми же классами.
Скорее всего всё точно так же должно работать и с pdoResources. Достаточно заменить getResources на pdoResources в шаблоне section и в сниппете taxonomyLinks.
Установка
- Качаем архив taxonomyTV.zip
- Создаем 2 сниппета taxonomyString и taxonomyLinks и вставляем в них содержимое файлов snippet-taxonomyString.php и snippet-taxonomyLinks.php соответственно.
- taxonomytv.class.php копируем в /core/model/modx/processors/element/tv/renders/mgr/input/
- taxonomytv.php копируем в /core/model/modx/processors/element/tv/renders/mgr/inputproperties/
- taxonomyTV.tpl копируем в /manager/templates/default/element/tv/renders/input/
- taxonomytvprops.tpl копируем в /manager/templates/default/element/tv/renders/inputproperties/
- Теперь можно создать TV «taxonomy», присвоить ему параметр ввода taxonomytv и заново перечитать статью следуя всем указаниям 🙂
Источник: dyranov.ru
Обработка ресурсов в MODX срдествами API
Ресурс в modx это объект со стандартным набором полей, который может быть расширен за счёт TV-параметров. Отличительной особенностью ресурса является наличие уникального URL адреса по которому к нему можно обратиться.
- Получение полей по ID ресурса
- Получение TV-переменных
- Сформировать URL по ID
Так как modx является фреймворком в оболочке движка, с ресурсами можно работать как через панель администрирования, так и посредством API (xPDO). API код может выполняться в сниппетах, плагинах и даже из PHP файлов. Я же рекомендую начать изучение с выполнения команд через дополнение «Console». Этот компонент позволяет быстро выполнять код без создания сниппетов. После его установки во вкладке «Приложения» появляется ссылка на редактор кода.
Получение полей по ID ресурса
Для получения доступа к полям ресурса, необходимо его выбрать по уникальному идентификатору.
$id = 1; $res = $modx->getObject(‘modResource’, $id); echo $res->get(‘pagetitle’);
Если код запускается в сниппете при обращении к ресурсу, то можно использовать другой вариант:
$modx->resource->get(‘pagetitle’); $modx->resource->get(‘content’); //или $modx->resource->getContent();
//текущего ресурса по id $modx->resource->getTVValue(3); //по названию TV-параметра $modx->resource->getTVValue(‘img-news’); //получение значения конкретного ресурса $res = $modx->getObject(‘modResource’,1); echo $res->getTVValue(‘img-news’);
Сформировать URL по ID:
$url = $modx->makeUrl($id);
Как изменить значение поля
Для изменения стандартных полей используется метод — «set», а для дополнительных — «setTVValue».
$res = $modx->getObject(‘modResource’,5); $res->set(‘content’, ‘Изменили содрежимое’); $res->setTVValue(‘img-news’,’test.png’); $res->save();
Если меняются только TV-поля, то для сохранения изменений достаточно «setTVValue».
Перебор и обработка ресурсов
API MODX позволяет выбрать ресурсы по определенным критериям и последовательно их обработать. Для примера выберем зададим следующие значения для фильтра:
- родительский ресурс c ID 26;
- обязательно опубликован;
- не удалён;
- доступен для поиска.
Заменим в их тексте все одинарные кавычки на двойные.
if(!$docs = $modx->getCollection(‘modResource’, array( ‘parent’ => 26, ‘published’ => 1, ‘deleted’ => 0, ‘searchable’ => 1 ))) foreach($docs as $doc)< $content = $doc->get(‘content’); $content = str_replace(»’,'»‘,$content); $doc->set(‘content’,$content); $doc->save(); >
Чтобы указать несколько родителей, используйте конструкцию: ‘parent:IN’ => array(26,27)
Весь перечень доступных полей можно посмотреть выполнив через консоль следующий код:
$res = $modx->getObject(‘modResource’,1); print(»); print_r($res->toArray()); print(»); return;
Получение обработанного содержимого
Если внутри ресурса содержимое формируется из чанков и сниппетов, а требуется получить сформированный html код, то воспользуйтесь этим решением:
$content = $resource->get(‘content’); $modx->resource = if (!empty($content)) < // get the max iterations tags are processed before processing is terminated $maxIterations= (integer) $modx->getOption(‘parser_max_iterations’, null, 10); // parse all cacheable tags first $modx->getParser()->processElementTags(», $content, false, false, », array(), $maxIterations); // parse all non-cacheable and remove unprocessed tags $modx->getParser()->processElementTags(», $content, true, true, », array(), $maxIterations); >
В переменной «$content» будет готовая html разметка.
Нахождение связанных объектов
В modx все построено на объектах. Ими являются ресурсы, пользователи, чанки, TV-параметры. И всё это между собой связано. Получая в качестве объекта ресурс, мы можем найти связанный с ним чанк или родителя и работать уже с ним опять как с объектом. Есть два способа получения связанных объектов:
- getOne() — получение единичного связанного объекта;
- getMany() — получение массива связанных объектов одного типа;
Разница в том, что у объекта могут быть связи с другими объектами множественные и одинарные. Например, у ресурса может быть несколько TV-параметров, чтобы получить их все (в массив) необходимо использовать метод getMany() , а вот родитель может быть только один, поэтому для его получения используется getOne() .
//получение родителя как объекта $parent = $resource->getOne(‘parent’); //если нужен только id $id = $resource->get(‘parent’);
Создание нового ресурса на API
API modx позволяет программно создавать новые ресурсы. Для этого достаточно запустить стандартный процессор (функцию). В качестве параметров передаём любые значения полей создаваемого ресурса.
$response = $modx->runProcessor(‘resource/create’, array( ‘pagetitle’ => ‘Тестовая страница’, ‘longtitle’ => », ‘description’ => », ‘introtext’ => », ‘content’ => ‘Содержимое тестовой страницы’, ‘alias’ => ‘new-page’, ‘template’ => 1, ‘published’ => 1, ‘parent’ => 0 )); if ($response->isError()) < return $modx->error->failure($response->getMessage()); > //получаем в качестве объекта вновь созданную страницу $newResource = $response->response[‘object’];
Если требуется заполнить TV-поля, то процессору дополнительно передаются параметры вида tv1 = ‘значение’ , где 1 — это идентификатор TV-поля.
Источник: realadmin.ru