Перейти к основному содержимому

Работа с документами через 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::getByIdint $id
\Pimcore\Model\Document::getByPathstring $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)​

Примеры​

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

Дочерние документы apitests - предпросмотр

Код ниже извлекает все опубликованные документы с 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
]);


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.