Tags 如何获得分配给pimcore对象的标记?

Tags 如何获得分配给pimcore对象的标记?,tags,pimcore,Tags,Pimcore,引用公共静态函数gettagsforement$cType,$cId。$cType和$cId取什么值 我想a为对象分配标记,b获取带有特定标记的对象,例如myTag,然后c迭代列表,如演示系统中的新闻和博客示例中所示。我的问题与b有关 更具体地说,myTag将作为myTags/myTag/myTarget保存在一个对象中,目的是获取用myTags/myTag标记的其他对象的列表 谢谢。获取对象的所有标记: $tags = \Pimcore\Model\Element\Tag::getTagsFo

引用公共静态函数gettagsforement$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。

获取对象的所有标记:

$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。

[functional programming way]用逗号分隔的对象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())));

[函数式编程方式]用逗号分隔的对象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())));