如何获取分配给 pimcore 对象的标签?
How to get the tags assigned to a pimcore object?
pimcore documentation指的是public静态函数getTagsForElement($cType, $cId)。 $cType 和 $cId 取什么值?
我想 (a) 为对象分配标签,(b) 获取带有特定标签的对象,例如myTag,然后 (c) 像演示系统中的新闻和博客示例一样遍历列表。我的问题与 (b) 有关。
更具体地说,myTag 将作为 myTags/myTag/myTarget 保存在一个对象中,目的是获取标记为 myTags/myTag 的其他对象的列表。
谢谢。
获取对象的所有标签:
$tags = \Pimcore\Model\Element\Tag::getTagsForElement("object", 3);
foreach ($tags as $tag) {
echo $tag->getName() . " (ID=" . $tag->getId() . ")<br>";
}
$cType 指元素类型(对象、文档、资产),$cId 指元素 ID(对象 ID、文档 ID、资产 ID)。
要获取具有特定标签的对象列表,请使用:
$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>";
}
在上面的示例中,您必须使用标签的 ID 而不是名称!
如果您想对文档和资产使用此方法,请将 o_id 替换为 id。
[函数式编程方式]实例(Object)Post 逗号分隔的标签:
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())));
pimcore documentation指的是public静态函数getTagsForElement($cType, $cId)。 $cType 和 $cId 取什么值?
我想 (a) 为对象分配标签,(b) 获取带有特定标签的对象,例如myTag,然后 (c) 像演示系统中的新闻和博客示例一样遍历列表。我的问题与 (b) 有关。
更具体地说,myTag 将作为 myTags/myTag/myTarget 保存在一个对象中,目的是获取标记为 myTags/myTag 的其他对象的列表。
谢谢。
获取对象的所有标签:
$tags = \Pimcore\Model\Element\Tag::getTagsForElement("object", 3);
foreach ($tags as $tag) {
echo $tag->getName() . " (ID=" . $tag->getId() . ")<br>";
}
$cType 指元素类型(对象、文档、资产),$cId 指元素 ID(对象 ID、文档 ID、资产 ID)。
要获取具有特定标签的对象列表,请使用:
$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>";
}
在上面的示例中,您必须使用标签的 ID 而不是名称!
如果您想对文档和资产使用此方法,请将 o_id 替换为 id。
[函数式编程方式]实例(Object)Post 逗号分隔的标签:
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())));