Наверх

Блог RSS

Сортировка: По дате ↓ По просмотрам

Часть 3 (Практика). Массовое редактирование объектов

13 апреля 2013, 21:50

Задание было таким:
Задание. Представьте, что вы сделали клиенту сайт, он его заполнил, в раздел «Статьи» уже выложил около 50 статей, после чего звонит вам и просит, чтобы в разделе статьи URL были такими:
/articles/23/
то есть, чтобы псевдонимом у статей был id ресурса. Напишите код, который надо выполнить в консоли, чтобы у всех существующих статей исправить псевдонимы.

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

Для того, чтобы у нескольких ресурсов изменить значение какого-то поля, нужно их сначала получить:
$resources = $modx->getCollection('modResource',array('parent' => 22));

Читать дальше

Часть 3 (Отступление). Пишем плагин

13 апреля 2013, 20:11

Здесь напишу небольшую подсказку для тех, кто еще ни разу не писал плагинов. Готового ответа на задание в этой статье нет.

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

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

При создании/редактировании ресурса вызываются два события: OnBeforeDocFormSave и OnDocFormSave. Первое событие вызывается перед тем, как данные ресурса сохранятся, а второе — уже после сохранения. Соответственно, во время события OnBeforeDocFormSave у нас объекта еще не существует — есть только данные, которые ввел пользователь. А нам нужно знать id ресурса, соответственно это событие нам не подходит.
Читать дальше

Часть 3. Методы set и save

13 апреля 2013, 19:36

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

Помимо метода get(), который получает значение, есть еще и метод set(), который это значение устанавливает. Мы можем поменять подряд сразу несколько значений, но после всех вызовов set() нужно объект сохранить. Сохраняет объект метод save().
set() — устанавливает значение одного из полей объекта.
save() — сохраняет все изменения в объекте.

Читать дальше

Часть 2 (Практика). Вывод свойств нескольких объектов

12 апреля 2013, 23:23

Итак, нам нужно выполнить следующее задание:
Задание. Написать сниппет, который выводит на страницу заголовки, аннотации и даты публикации всех новостей, если их всего пять или меньше, а если новостей больше пяти, пусть выводит содержание ресурса «Новости» (того самого контейнера, который является родительским ресурсом всех новостей).
Допустим, id ресурса с новостями 22. Тогда получить все дочерние ресурсы с заголовками, аннотациями и пр. мы можем так:
$where = array('parent' => 22);
$resources = $modx->getCollection('modResource',$where);
foreach ($resources as $res) {
      $output .= '<h4>'.$res->get('pagetitle').'</h4>';
      $output .= '<p>'.$res->get('introtext').'</p>';
      $output .= '<p><small>Дата: '.$res->get('publishedon').'</small></p>';
}
return $output;

Читать дальше

Часть 2. Метод getCollection

12 апреля 2013, 23:14

Продолжим знакомство с xPDO. В первой части мы рассмотрели возможности получения информации о каком-то объекте. А что, если нам нужно получить сразу несколько объектов, при том, что мы не знаем, какие у них id-шники, сколько их, знаем только, например, их родителя?

Здесь нам поможет метод getCollection.

getCollection — брат метода getObject, который в отличие от него выдает (возвращает) нам не объект, а целый массив объектов.
Давайте откроем сайт из предыдущей части и в консоли напишем следующее:
$resources = $modx->getCollection('modResource');
$output = '<p>Всего ресурсов: '.count($resources).'</p>';
foreach ($resources as $k => $res) {
  $output .= '<p>['.$k.'] => '.$res->get('pagetitle').'</p>';
}
print $output;

Читать дальше

Подписка на новости для вашего сайта

12 апреля 2013, 15:55

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

Так как на начальном этапе подписчиков будет немного, то отправку писем я реализовал с помощью простого плагина на событие OnDocFormSave
Читать дальше

Часть 1 (Практика). Получение свойств объекта

11 апреля 2013, 17:08

Давайте, напишем свой сниппет, который будет показывать пользователю любое поле любого ресурса. Нам понадобятся знания, полученные в первой части статьи.
Задача. У сайта есть слоган. Текст слогана находится в поле introtext главной страницы сайта. Нужно отображать этот слоган на всех страницах сайта.

Читать дальше

Часть 1. Метод getObject

11 апреля 2013, 16:42

Я думаю, все когда-либо слышали аббревиатуру xPDO, все знают, что она как-то связана с MODX. Многие слышали, что xPDO может показывать фокусы, с его помощью можно производить массовые операции с разными объектами, а Fi1osof и многие другие постоянно всем советуют изучать его.

Однако многих отпугивают такие заголовки, как, например

$this->_lazy и повторные запросы к БД при $object->toArray() и ->get();
или
xPDO::addDerivativeCriteria(), class_key, CRC и прочие связанные друг с другом тонкости

потому что начинать, конечно, надо с простого.

Вот в этой статье я и попытаюсь сделать введение в xPDO для тех, кто просто хочет понять, что это такое.

Для начала разверните где-нибудь тестовый пустой сайт (проще всего будет зарегистрироваться на https://modhost.pro/, создать бесплатный аккаунт и на нем развернуть один сайт). После чего поставьте себе компонент Console и создайте пару-тройку страниц с разными названиями.
Читать дальше

Плагин для переключения контекстов при отсутствии нужного URL в текущем контексте

11 апреля 2013, 14:46

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

Прописывать везде ссылки типа [[~30 &context=`catalog`]] не хочется, да и не всегда возможно, поэтому я написал плагинчик switchContext на событие OnHandleRequest, который сам переключает контекст, если нужной страницы нет в текущем контексте
Читать дальше

Галерея в стиле Вконтакте или Яндекс.Картинок

11 апреля 2013, 13:21

Уже написал две статьи о своем новом сниппете AlignImage на community.modx-cms.ru и на modxclub.ru. Для тех, кому интересны подробности, опишу их здесь.

Сниппет позволяет выводить галерею в стиле Вконтакте или Яндекс.Картинок. Вот так, например:


Читать дальше

Авторизация

через сервис Loginza:


Шаблоны MODX

1 2 Дальше »

Объектная
модель
MODX