public function getData()
 {
     $ezTagsObject = new eZTagsObject();
     $returnArray = array();
     $childrenArray = array();
     // recupero la lista dei remoteID dei tags che il server gestisce
     $tagsGestiti = explode(',', $this->runtimeSettingsINI->variable('serverSyncTags', 'serverSyncTagsList'));
     $numtagreturned = count($tagsGestiti);
     // Ciclo per recuperare gli array degli oggetti ritornati
     for ($i = 0; $i < $numtagreturned; $i++) {
         $parentFields = array();
         #$eZTagParentObj = eZTagsObject::fetchByRemoteID('e4fd6bcf76ab7ce0e04684bdb867a76d');
         #$eZTagParentObj = eZTagsObject::fetchByRemoteID(trim($tagsGestiti[$i]));
         $eZTagParentObj_array = eZTagsObject::fetchByKeyword(trim($tagsGestiti[$i]), true);
         $eZTagParentObj = $eZTagParentObj_array[0];
         /*
         $eZTagParentObj->RemoteID;
         $eZTagParentObj->getAttribute('RemoteID');
         $eZTagParentObj->attributes('remote_id');
         */
         # recupero e trasformo in array l'oggetto parentID
         $parentFields = itobjectsutils::getObjectAsArray($eZTagParentObj);
         # recupero tutti i children tags
         $childrenArray = eZTagsObject::fetchByParentID($eZTagParentObj->ID);
         # aggiungo al mio array generale il blocco dei children tags
         $parentFields['subTags'] = $childrenArray;
         $returnArray[$eZTagParentObj->RemoteID] = $parentFields;
     }
     return $returnArray;
 }
 function findTags($id)
 {
     if (is_numeric($id)) {
         $tags = array(eZTagsObject::fetch($id));
     } else {
         $tags = eZTagsObject::fetchByKeyword($id);
     }
     return $tags;
 }
 /**
  * Fetches all tags named with provided keyword
  *
  * @static
  * @param string $keyword
  * @return array
  */
 public static function fetchTagsByKeyword($keyword)
 {
     $result = eZTagsObject::fetchByKeyword($keyword);
     if (is_array($result) && !empty($result)) {
         return array('result' => $result);
     } else {
         return array('result' => false);
     }
 }
 /**
  * Provides suggestion results when adding tags to object
  *
  * @static
  * @param mixed $args
  * @return array
  */
 public static function suggest($args)
 {
     $tags = array();
     $siteINI = eZINI::instance('site.ini');
     if ($siteINI->variable('SearchSettings', 'SearchEngine') == 'ezsolr' && class_exists('eZSolr')) {
         $tagsCount = 1;
         $filteredTagsArray = array();
         $http = eZHTTPTool::instance();
         $tagsString = $http->postVariable('tags_string');
         $tagsArray = explode('|#', $tagsString);
         $subTreeLimit = $http->postVariable('subtree_limit');
         $hideRootTag = $http->postVariable('hide_root_tag') == '1' ? true : false;
         if (!empty($tagsArray) && strlen(trim($tagsArray[0])) > 0) {
             $solrFilter = '"' . trim($tagsArray[0]) . '"';
             $filteredTagsArray[] = strtolower(trim($tagsArray[0]));
             for ($i = 1; $i < count($tagsArray); $i++) {
                 if (strlen(trim($tagsArray[$i])) > 0) {
                     $solrFilter = $solrFilter . ' OR "' . trim($tagsArray[$i]) . '"';
                     $filteredTagsArray[] = strtolower(trim($tagsArray[$i]));
                     $tagsCount++;
                 }
             }
             $solrFilter = 'ezf_df_tags:(' . $solrFilter . ')';
             $solrSearch = new eZSolr();
             $params = array('SearchOffset' => 0, 'SearchLimit' => 0, 'Facet' => array(array('field' => 'ezf_df_tags', 'limit' => 5 + $tagsCount, 'mincount', 1)), 'SortBy' => null, 'Filter' => $solrFilter, 'QueryHandler' => 'ezpublish', 'FieldsToReturn' => null);
             $searchResult = $solrSearch->search('', $params);
             $facetResult = $searchResult['SearchExtras']->attribute('facet_fields');
             $facetResult = $facetResult[0]['nameList'];
             $tags = array();
             foreach ($facetResult as $facetValue) {
                 if (!in_array(strtolower($facetValue), $filteredTagsArray)) {
                     $tags[] = trim($facetValue);
                 }
             }
             if (!empty($tags)) {
                 $tags = eZTagsObject::fetchByKeyword(array($tags));
             }
         }
     }
     $returnArray = array();
     $returnArray['status'] = 'success';
     $returnArray['message'] = '';
     $returnArray['tags'] = array();
     foreach ($tags as $tag) {
         if (!$subTreeLimit > 0 || $subTreeLimit > 0 && strpos($tag->attribute('path_string'), '/' . $subTreeLimit . '/') !== false) {
             if (!$hideRootTag || $hideRootTag && $tag->attribute('id') != $subTreeLimit) {
                 $returnArrayChild = array();
                 $returnArrayChild['tag_parent_id'] = (int) $tag->attribute('parent_id');
                 $returnArrayChild['tag_parent_name'] = $tag->hasParent() ? $tag->getParent()->attribute('keyword') : '';
                 $returnArrayChild['tag_name'] = $tag->attribute('keyword');
                 $returnArrayChild['tag_id'] = (int) $tag->attribute('id');
                 $returnArray['tags'][] = $returnArrayChild;
             }
         }
     }
     return $returnArray;
 }
 /**
  * Fetches all tags named with provided keyword
  *
  * @static
  *
  * @param string $keyword
  * @param mixed $language
  *
  * @return array
  */
 public static function fetchTagsByKeyword($keyword, $language = false)
 {
     if ($language) {
         if (!is_array($language)) {
             $language = array($language);
         }
         eZContentLanguage::setPrioritizedLanguages($language);
     }
     if (strpos($keyword, '*') !== false) {
         $keyword = preg_replace(array('#%#m', '#(?<!\\\\)\\*#m', '#(?<!\\\\)\\\\\\*#m', '#\\\\\\\\#m'), array('\\%', '%', '*', '\\\\'), $keyword);
         $keyword = array('like', $keyword);
     }
     $result = eZTagsObject::fetchByKeyword($keyword);
     if ($language) {
         eZContentLanguage::clearPrioritizedLanguages();
     }
     if (is_array($result) && !empty($result)) {
         return array('result' => $result);
     }
     return array('result' => false);
 }
<?php

/**
 * Estrae in formato JSON l'elenco delle tematiche
 */
$module = $Params['Module'];
$tematiche = array();
$subtree = eZTagsObject::fetchByKeyword('Tematiche');
if (count($subtree) > 0) {
    $tematiche = eZTagsObject::subTreeByTagID(array('SortBy' => array('keyword', 'asc'), 'Depth' => 1), $subtree[0]->ID);
}
header('Content-Type: application/json');
echo json_encode($tematiche);
eZExecution::cleanExit();
 /**
  * Cerca sul siteaccess locale tramite le KeyWord se esistono i tag uguali e
  * li imposta. Nel caso di Keyword uguali con nodo padre diverso questo metodo non funziona.
  * 
  * @param string $identifier
  * @param string $remoteTags
  */
 protected function createLocalTags($identifier, $remoteTags)
 {
     $tag = "";
     $ezTagsArray = explode("|#", $remoteTags);
     // Verifico ci siano tags impostati
     if (!empty($ezTagsArray)) {
         // Verifico che la lunghezza dell'array sia un multiplo di 3
         if (count($ezTagsArray) % 3 == 0) {
             $tagsNum = count($ezTagsArray) / 3;
             $tagIDs = "";
             $tagKeywords = "";
             $tagParents = "";
             for ($i = $tagsNum; $i < $tagsNum * 2; $i++) {
                 $keyword = $ezTagsArray[$i];
                 $ezTag = eZTagsObject::fetchByKeyword($keyword);
                 if (!empty($ezTag)) {
                     $tagIDs .= $ezTag[0]->ID . '|#';
                     $tagKeywords .= $ezTag[0]->Keyword . '|#';
                     $tagParents .= $ezTag[0]->ParentID . '|#';
                 }
             }
             $tag = $tagIDs . $tagKeywords . $tagParents;
             $tag = substr($tag, 0, strlen($tag) - 2);
         }
     }
     return $tag;
 }