Наверх

Блог RSS

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

Часть 5. Создание и удаление объектов

15 апреля 2013, 19:01

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

Для того, чтобы создать объект мы будем пользоваться методом newObject()
newObject() — создает новый объект указанного класса.
Но не забывайте сохранять объекты — здесь как с файлами — сначала создаем новый файл, потом наполняем его содержимым и сохраняем на диск.

Давайте, поработаем с чем-то еще, кроме ресурсов. Например, создадим новую категорию элементов:
$category = $modx->newObject('modCategory');
// название категорий хранится в поле category
$category->set('category','helloWorldCategory');
$category->save();

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

Часть 4 (Практика). Редактирование ТВ-параметров

15 апреля 2013, 14:57

Второе практическое задание звучало так:
Задание 2. Напишите сниппет, который будет при каждом просмотре страницы увеличивать значение TV-параметра «Просмотры» на 1. А потом напишите второй сниппет, который выведет общее количество просмотров всех страниц, созданных пользователем. Подсказка — текущего пользователя можно получить так:
$user = $modx->user
и в переменной $user у нас будет объект класса modUser с полями текущего пользователя.
Ну первый сниппет для нас уже легко. Создаем ТВ views и сниппет setViews:
if ($views = $modx->resource->getTVValue('views')) {
    $views++;
} else {
    $views = 1;
}
$modx->resource->setTVValue('views',$views);
И вставляем его где-нибудь на странице. Некешируемым (так как он должен выполняться каждый раз при открытии страницы).
Читать дальше

Часть 4 (Практика). Доступ к ТВ-параметрам

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

Задание. Написать сниппет, который будет выводить на страницу заголовки, анноцации и даты публикации только тех ресурсов, у которых значение TV-параметра «Выводить на главной» равно 1. Или если таких ресурсов больше 10 будет выводить сообщение «Найдено больше 10 ресурсов»
У меня id TV-параметра «Выводить на главной» — 3.

Итак. Сначала нам надо найти все объекты класса modTemplateVarResource, у которых значение равно единице:
$tvs = $modx->getCollection('modTemplateVarResource', array('value' => 1));
foreach ($tvs as $k => $tv) {
    $tvs[$k] = $tv->toArray();
}
print "<pre>";
print_r($tvs);

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

Часть 4. Связи объектов, getOne, getMany, работа с ТВ

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

В этой части мы узнаем, что есть и другие объекты, помимо ресурсов. А так же узнаем, что объекты могут быть связаны друг с другом.

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

Думаю, вы уже догадались, что TV-параметры — это тоже объекты) У TV-параметров класс modTemplateVarResource.

Давайте посмотрим, как же выглядят эти объекты:
$tvs = $modx->getCollection('modTemplateVarResource');
foreach ($tvs as $k => $tv) {
    $tvs[$k] = $tv->toArray();
}
print '<pre>';
print_r($tvs);
Если хоть у одного из ресурсов заполнено хоть одно из дополнительных полей, вы увидите это значение в результате выполнения скрипта.
Читать дальше

Кастомизация форм в MODX Revolution

14 апреля 2013, 13:24


В MODX есть интересная возможность — вы можете менять внешний вид формы редактирования ресурсов практически как вам хочется. Причем вы можете сделать разные формы для разных групп пользователей, и даже для разных ресурсов. Можно выбирать разные профили форм для данного ресурса в зависимости от его шаблона, родителя или других свойств.

И для этого нам не придется писать ни одной строчки кода!

Давайте, посмотрим, что, например, можно сделать с формами
Читать дальше

Часть 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;

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

Авторизация

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

Подписка или RSS

Буду присылать новые статьи — никакого спама



Шаблоны MODX

1 2 Дальше »

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