2016-06-12 61 views
0

pimcore documentation引用公共靜態函數getTagsForElement($ cType,$ cId)。 $ cType和$ cId需要什麼值?我想(a)給對象分配標籤,(b)用特定標籤獲取對象,例如, myTag,然後(c)在演示系統中的新聞和博客示例中遍歷列表。我的問題涉及(b)。如何獲取分配給pimcore對象的標籤?

更具體地說,myTag將作爲myTags/myTag/myTarget被保存在一個對象中,目標是獲得使用myTags/myTag標記的其他對象的列表。

謝謝。

回答

1

獲取對象的所有標籤:

$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。由逗號分隔

0

[功能的編程方式]實施例(對象)張貼標籤:

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())));