Работа с документами через PHP API
Pimcore предоставляет объектно-ориентированный PHP API для работы с документами.
Операции CRUD
Создание нового документа
Чтобы создать новый документ, вам нужно указать два обязательных атрибута:
- Уникальный ключ
- ID родительского документа — ID родителя (документ, папка и др.)
Вы также можете установить любое другое значение, доступное в структуре документов (настройки, свойства, дочерние элементы и т. д.).
Тип документа (страница, папка, ссылка, электронное письмо, сниппет и т. д.) Полный список можно получить, используя:
\Pimcore\Model\Document::getTypes()Каждый тип имеет свою собственную модель, например: документ-ссылку можно создать с помощьюnew \Pimcore\Model\Document\Link.
Пример ниже показывает, как создать простой документ страницы через PHP API.
//СОЗДАТЬ ДОКУМЕНТ СТРАНИЦЫ
$page = new \Pimcore\Model\Document\Page();
$page->setKey('document8');
$page->setParentId(82); // id документа или папки
// необязательный параметр позволяет предоставить дополнительную информацию
// текущие поддерживаемые:
// * versionNote: заметка, добавленная к версии (см. вкладку версия)
$page->save(["versionNote" => "моя новая версия"]);
Теперь вы можете обновить родительский узел только что созданного документа в административном интерфейсе (ID 82 в данном случае), и вы увидите только что созданный документ.
Редактирование существующего документа
Если вы хотите получить документ, вы можете использовать методы getById() или getByPath() из класса \Pimcore\Model\Document.
Ниже приведен список доступных методов для загрузки документов.
| Метод | Аргументы |
|---|---|
| \Pimcore\Model\Document::getById | int $id |
| \Pimcore\Model\Document::getByPath | string $path |
В следующем коде показано, как получить редактируемое значение wysiwyg для документа.
// ЗАГРУЗИТЬ ДОКУМЕНТ
$document = \Pimcore\Model\Document::getById(4);
if($document) {
// логика, когда тип документа — страница
/** @var \Pimcore\Model\Document\Page $document */
/** @var \Pimcore\Model\Document\Editable\Wysiwyg $wysiwygElement */
$wysiwygElement = $document->getEditable('content');
var_dump($wysiwygElement->getData());
}
Вы, вероятно, уже поняли, что если хотите изменить значение выбранного редактируемого элемента или любое другое значение, вы можете просто установить значение (с помощью доступного метода), а затем сохранить документ.
//...
/** @var \Pimcore\Model\Document\Editable\Wysiwyg $wysiwygElement */
$wysiwygElement = $document->getEditable('content');
$wysiwygElement->setDataFromResource('<p>Lorem Ipsum is simply dummy text of the printing and typesetting.</p>');
$document->save(); //сохранить изменения в документе
Удаление документа
Удаление оказывается таким же простым или даже проще.
Просто загрузите документ и используйте метод delete, доступный в \Pimcore\Model\Document.
$document = \Pimcore\Model\Document::getById(110);
if ($document) {
$document->delete();
}
Списки документов (Listings)
Примеры
Предположим, что у нас есть следующая структура дерева документов:

Код ниже извлекает все опубликованные документы с parentId = 82:
$listing = new \Pimcore\Model\Document\Listing();
$listing->setCondition("parentId = 82");
foreach($listing as $doc) {
// делайте что хотите
}
Если вы хотите получить также все неопубликованные документы, установите следующий флаг: $listing->setUnpublished(true);.
Конфигурации
| Метод | Аргументы | Описание |
|---|---|---|
setOrder() | string (asc,desc) | установить порядок по возрастанию или убыванию. |
setOrderKey() | string | имя/имена выбранной колонки в качестве ключа сортировки. Вы можете выбрать много ключей сортировки. |
setLimit() | int | ограничение на количество результатов |
setOffset() | int | смещение от начала элементов коллекции |
setCondition() | string | Ваше собственное SQL условие, как в приведенном выше примере. |
Методы
| Метод | Аргументы | Описание |
|---|---|---|
getCount() | Возвращает общее количество выбранных строк. | |
getTotalCount() | Возвращает общее количество выбранных строк (исключая смещение и лимит). | |
getPaginatorAdapter() | Список реализует \Iterator, вы можете использовать список как пагинатор. | |
getItems() | int $offset, int $itemsCountPerPage | в качестве аргументов необходимо указать ограничение строк и смещение. |
loadIdList() | Возвращает полный массив с id как строкой. |
Чтобы узнать больше о использовании пагинатора со списками, см. Работа с объектами через часть PHP API.
Расширенный пример
$listing = new \Pimcore\Model\Document\Listing();
$listing->setUnpublished(1);
$listing->setCondition("`parentId` = 82")
->setOrderKey(['key', 'published'])
->setOrder('desc')
->setOffset(2)
->setLimit(2);
$listing->getTotalCount();
$listing->loadIdList();
foreach($listing as $item) {
// ...
}
Кроме того, вы можете использовать следующий статический метод, чтобы получить список документов:
// список всех опубликованных потомков из папки
/** @var \Pimcore\Model\Document\Listing $listing */
$listing = \Pimcore\Model\Document::getList([
'unpublished' => true,
'condition' => "`parentId` = 82",
'orderKey' => ['key', 'published'],
'order' => 'desc',
'offset' => 2,
'limit' => 2
]);
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.