Как известно, в ModX есть прекрасный механизм позволяющий прикрепить практически любые собственный данные к документу, с последующим выводом этих данных. Данный механизм называется Template Variables (Переменные Шаблона). Однако у данного механизма есть небольшое ограничение, это невозможность задать одной переменной несколько значений.
Почему такое поведение можно считать ограничением? Допустим, у нас есть документ, к которому надо прикрепить, а затем вывести, набор PDF файлов. Что можно сделать в данном случае? Можно вставить ссылки на все эти PDF в контент, однако для контент-менеджера это будет весьма трудоемкая и времязатратная задача. Можно создать чанк, в котором задавать ссылки на все PDF файлы, однако если таких документов будет много, то чанков не напасешься.
В данном случае, самым простым способом должно стать использование TV (Переменной Шаблона) с типом File, которой бы мы присвоили бы путь к файлу вместе с его именем, и которую бы использовали для формирования ссылок. Однако, в TV мы можем задать только одно значение, а делать большое количество TV не разумно.
MODX Implementation Part 3 — Advanced Chunks & TV’s
Из данного положения есть выход. Это пакет для ModX Evolution под названием multiTV (http://modx.com/extras/package/multitv). Данный пакет был специально создан, что решить проблему с множественными значениями в Переменной Шаблона.
Я не буду останавливаться на всех возможных значениях, а приведу сразу код с краткими пояснениями:
array( ‘caption’ => ‘File’, ‘type’ => ‘file’ ), ‘title’ => array( ‘caption’ => ‘Title’, ‘type’ => ‘text’ ) ); ?>
В данном коде, мы указали, что переменная будет состоять из двух полей, а именно типа file (будет содержать путь к файлу) и типа text (будет содержать название, которым мы воспользуемся при формировании ссылки на PDF документ). Отображение полей будет происходить в вертикальном режиме. Все, теперь мы можем заполнить данную TV на каком-нибудь документе.
Для вывода данных воспользуемся входящим в пакет сниппетом:
[[multiTV? docid=`[*id*]` outerTpl=`brOut` Каталоги [+wrapper+]
Все, теперь любой контент-менеджер может прямо в интерфейсе заполнить все данные, загрузить файлы, после чего они автоматически будут выводиться в нашем шаблоне. Данное решение можно применять не только к файлам, но и ко всем возможным типам ввода TV, кроме url и richtext.
Источник: www.devmarks.ru
MODx
Чанк — кусок статического текста который можно встроить в шаблон, в другой чанк, либо вызвать в снипете. Чанк обладает теми же свойствами что и шаблон за исключением того, что не содержит TV-параметров(дополнительные поля) и не может быть назначен ресурсу напрямую.
Чанк не может содержать какой-либо исполняемый код, но в нём можно вызывать сниппеты для вывода динамического контента.
MIGX TV Gallery in MODX Revolution
Где хранятся чанки.
Чанки, как и остальные объекты MODX, хранятся в базе данных. Чанки содержатся в таблице modx_site_htmlsnippets (modx — это префикс таблиц, заданный во время установки системы).
Работа с чанками в админке MODX.
Чанки в админке MODX Revolution расположены на левой панели во вкладке «Элементы».
Создание чанка.
Создание чанка осуществляется с помощью кнопки «+». После нажатию на эту кнопку открывается страница, содержащая форму. Среди полей этой формы, основными являются имя и код чанка (html). Имя — это название, посредством которого этот чанк можно будет вызывать в шаблоне, содержимом ресурса или в другом месте. Код чанка (html) — это контент, который парсер будет выводить на месте вызова чанка.
Кроме этого система MODX позволяет хранить содержимое чанка во внешнем файле. Для этого необходимо установить галочку в поле статичный, выбрать источник файлов и указать его расположение.
Редактирование чанка
Для редактирования некоторого чанка в админке необходимо нажать на него левой кнопкой мыши. После этого откроется форма полями чанки, в которую необходимо внести изменения и нажать на кнопку «Сохранить».
Вызов чанка осуществляется так:
[[$chunk]]
Привет, [[+name]]. У тебя [[+messageCount]] непрочитанных сообщений.
Такой чанк можно вызвать с параметрами, которые в последствии передадутся внутрь его:
[[$intro? messageCount=`12`]]
Разрабатываем социальную сеть на MODx Revolution
2012-08-01 в 12:06, admin , рубрики: modx, web-разработка, Веб-разработка, социальные сети, метки: modx, web-разработка, социальные сети
MODx развивается стремительными темпами, и я решил попробовать сделать социальную сеть на этом замечательном движке. Ведь в нем давно уже есть возможность работать с пользователями (регистрация, авторизация и пр.), встроенный механизм сообщений пользователей, он умеет работать с изображениями и много чего еще.
Для начала давайте разберемся с пользователями, дадим им возможность писать статьи, например, или добавлять свои события.
Регистрация пользователей
Для регистрации мы будем использовать сниппет Login.
[[!Register? usergroups=`Users` activationResourceId=`11` validate=`email:email:required`]]
О самом сниппете написано уже много, покажу, что делает наш хук addUser:
Сниппет addUser
Сниппет addUser
Сниппет addResource
Сниппет addResource
// Создаем ресурс $newResource = $modx->newObject(‘modResource’); // Заполняем нужные значения $newResource->set(‘pagetitle’,$pagetitle); $newResource->set(‘longtitle’,$longtitle); $newResource->set(‘description’,$description); $newResource->set(‘introtext’,$introtext); $newResource->set(‘content’,$content); $newResource->set(‘menutitle’,$menutitle); $newResource->set(‘template’,$template); $newResource->set(‘isfolder’,$isfolder); $newResource->set(‘hidemenu’,$hidemenu); $newResource->set(‘parent’,$parent); $newResource->set(‘published’,$published); $newResource->set(‘alias’,$parent.date(‘YmdHis’)); if ($published) $newResource->set(‘publishedon’,$publishedon); // Сохраняем ресурс if ($newResource->save()) < $id = $newResource->get(‘id’); $newResource->set(‘alias’,$prefix.$id); $newResource->save(); // Очищаем кеш, чтобы изменения были видны сразу $modx->cacheManager->refresh(); return $id; > return false;
Сниппет tv
Сниппет tv
newQuery(‘modTemplateVarResource’); $q->select(array(‘value’, ‘tmplvarid’, ‘contentid’))->where(array(‘tmplvarid’=>$options, ‘contentid’=>$input)); $r = $modx->getObject(‘modTemplateVarResource’, $q); return $r->value; > else < // либо устанавливаем значение TV if (!$id) if (!$tv) $tv = $_POST[‘tv’]; if (!$value) $value = $_POST[‘value’]; if ($value == ‘ ‘) $value = »; if ($modx->getObject(‘modTemplateVarResource’, array(‘contentid’ => $id, ‘tmplvarid’ => $tv))) < $tvar = $modx->getObject(‘modTemplateVarResource’, array(‘contentid’ => $id, ‘tmplvarid’ => $tv)); > else < $tvar = $modx->newObject(‘modTemplateVarResource’); $tvar->set(‘contentid’, $id); $tvar->set(‘tmplvarid’, $tv); > $tvar->set(‘value’, $value); $tvar->save(); >
После того, как пользователь подтвердил свой e-mail, направляем его на страничку редактирования информации о себе:
[[!FormIt? successMessage=`Изменения сохранены`]] [[$editPage]]
Соответственно, сниппет editUserPage
Сниппет editUserPage
Сниппет editUserPage
user->getOne(‘Profile’)->get(‘website’); $name = $_POST[‘name’]; if ($name == ») $name = ‘ ‘; // И вносим изменения на страницу if ($modx->runSnippet(‘editResource’,array(‘resId’ => $id, ‘pagetitle’ => $name, ‘longtitle’ => $name, ‘menutitle’ => $name, ‘hidemenu’ => ‘show’))) < foreach ($_POST as $key =>$value) < switch ($key) < case ‘com_address’: $tv = 2; break; case ‘com_egrul’: $tv = 5; break; case ‘com_email’: $tv = 9; break; case ‘com_federate’: $tv = 4; break; case ‘com_head’: $tv = 10; break; case ‘com_inn’: $tv = 6; break; case ‘com_kpp’: $tv = 7; break; case ‘com_phone’: $tv = 3; break; case ‘com_regon’: $tv = 8; break; default: $tv = 0; break; >if (!$value) $value = ‘ ‘; if ($tv) $modx->runSnippet(‘tv’, array(‘id’ => $id, ‘tv’ => $tv, ‘value’ => $value)); > // Очищаем кеш, чтобы изменения были видны сразу $modx->cacheManager->refresh(); return true; >
Создаем статьи или события пользователя
Пусть у нас пользователи могут добавлять на свою страничку предстоящие и прошедшие события:
[[!FormIt? successMessage=`Изменения сохранены` getOne(‘Profile’)->get(‘website’); $name = $_POST[‘name’]; $date = explode(‘.’,$_POST[‘event_date’]); $publishedon = $date[2].»-«.$date[1].»-«.$date[0].» 10:00:00″; $introtext = $_POST[‘description’]; if ($id = $modx->runSnippet(‘addResource’,array(‘pagetitle’ => $name, ‘longtitle’ => $name, ‘introtext’ => $introtext, ‘menutitle’ => $name, ‘published’ => 1, ‘publishedon’ => $publishedon, ‘parent’ => $parent, ‘template’ => 4, ‘isfolder’ => 1))) < // Заполняем любые параметры события, которые нам нужны foreach ($_POST as $key =>$value) < switch ($key) < case ‘event_address’: $tv = 14; break; case ‘event_type’: $tv = 12; break; case ‘event_org’: $tv = 34; break; case ‘event_peoples’: $tv = 24; break; default: $tv = 0; break; >if (!$value) $value = ‘ ‘; if ($tv) $modx->runSnippet(‘tv’, array(‘id’ => $id, ‘tv’ => $tv, ‘value’ => $value)); > $modx->cacheManager->refresh(); // Переадресовываем на просмотр события $url = «/companies/id».$parent.»/event».$id; header(‘location: ‘.$url); exit; return true; >
В итоге
На нашем сайте пользователи могут зарегистрироваться, разместить информацию о себе, создавать события или писать статьи.
Что я планирую с этим делать
Дальше я планирую сделать для пользователей возможность загрузки фотографий, добавить функционал для отправки и чтения личных сообщений, как писал об этом Goobs, а так же возможность пользователей регистрироваться на понравившиеся события.
Источник: www.pvsm.ru