Как получить теги, назначенные объекту pimcore?

документация pimcore ссылается на общедоступную статическую функцию getTagsForElement($cType, $cId) . Какие значения принимают $cType и $cId?

Я хочу (а) присвоить теги объектам, (б) получить объекты с определенным тегом, например. myTag, а затем (в) пройтись по списку, как в примерах новостей и блогов в демонстрационной системе. Мой вопрос относится к (б).

В частности, myTag будет храниться в одном объекте как myTags/myTag/myTarget, а цель — получить список других объектов, помеченных с помощью myTags/myTag.

Спасибо.


person Withindale    schedule 12.06.2016    source источник


Ответы (2)


Получить все теги объекта:

$tags = \Pimcore\Model\Element\Tag::getTagsForElement("object", 3);

foreach ($tags as $tag) {
    echo $tag->getName() . " (ID=" . $tag->getId() . ")<br>";
}

$cType относится к типу элемента (объект, документ, актив), а $cId относится к идентификатору элемента (идентификатор объекта, идентификатор документа, идентификатор актива).

Чтобы получить список объектов с определенным тегом, используйте это:

$type = "object";
$tagId = 3;
$tag = Pimcore\Model\Element\Tag::getById($tagId);
$tagPath = $tag->getFullIdPath();

$considerChildren = true;

if ($considerChildren) {
    $conditionForTags = "o_id IN (SELECT cId FROM tags_assignment INNER JOIN tags ON tags.id = tags_assignment.tagid WHERE ctype = '$type' AND (id = '$tagId' OR idPath LIKE '$tagPath%' ))";
} else {
    $conditionForTags = "o_id IN (SELECT cId FROM tags_assignment WHERE ctype = '$type' AND tagid = '$tagId')";
}

$objectList = new \Pimcore\Model\Object\Test\Listing();
$objectList->setCondition($conditionForTags);

foreach ($objectList as $item) {
    echo $item->getId() . "<br>";
}

В приведенном выше примере вы должны использовать идентификатор тега, а не имя!

Если вы хотите использовать этот подход для документов и активов, замените o_id на id.

person Igor Benko    schedule 12.06.2016

[способ функционального программирования] пример (Объект) Теги сообщения, разделенные запятой:

echo implode(', ',array_map(function($tag) {
    return '<a href="/posts/tag/' . $tag->getId() . '">'.$this->t($tag->getName()) . '</a>';
}, \Pimcore\Model\Element\Tag::getTagsForElement('object', $this->post->getId())));
person fuzin    schedule 16.01.2017