1

I am trying to use K2 Tool's tag cloud function on my joomla website but the only setting I can pick is by X Popular Tags which doesn't actually specific what makes the tag popular.

So I am trying to make it so that the tag cloud works as X Random instead. So everytime the page/module is reloaded, X say 20 would display 20 randomly chosen tags.

I look through the module's code and found the function in helper.php but I don't understand how the code select the tags. My guess is if I want to change it to use X random instead of X popular, I would need to change the query for $query?

function tagCloud(&$params) {

    $mainframe = &JFactory::getApplication();
    $user = &JFactory::getUser();
    $aid = (int) $user->get('aid');
    $db = &JFactory::getDBO();

    $jnow = &JFactory::getDate();
    $now = $jnow->toMySQL();
    $nullDate = $db->getNullDate();

    $query = "SELECT i.id FROM #__k2_items as i";
    $query .= " LEFT JOIN #__k2_categories c ON c.id = i.catid";
    $query .= " WHERE i.published=1 ";
    $query .= " AND ( i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now)." ) ";
    $query .= " AND ( i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now)." )";
    $query .= " AND i.trash=0 ";
    if(K2_JVERSION=='16'){
        $query .= " AND i.access IN(".implode(',', $user->authorisedLevels()).") ";
    }
    else {
        $query .= " AND i.access <= {$aid} ";
    }
    $query .= " AND c.published=1 ";
    $query .= " AND c.trash=0 ";
    if(K2_JVERSION=='16'){
        $query .= " AND c.access IN(".implode(',', $user->authorisedLevels()).") ";
    }
    else {
        $query .= " AND c.access <= {$aid} ";
    }

    $cloudCategory = $params->get('cloud_category');
    if(is_array($cloudCategory)) {
        $cloudCategory = array_filter($cloudCategory);
    }
    if ($cloudCategory) {
        if(!is_array($cloudCategory)){
            $cloudCategory = (array)$cloudCategory;
        }
        foreach($cloudCategory as $cloudCategoryID){
            $categories[] = $cloudCategoryID;
            if($params->get('cloud_category_recursive')){
                $children = modK2ToolsHelper::getCategoryChildren($cloudCategoryID);
                $categories = @array_merge($categories, $children);
            }
        }
        $categories = @array_unique($categories);
        JArrayHelper::toInteger($categories);
        if(count($categories)==1){
            $query .= " AND i.catid={$categories[0]}";
        }
        else {
            $query .= " AND i.catid IN(".implode(',', $categories).")";
        }
    }

    if(K2_JVERSION == '16') {
        if($mainframe->getLanguageFilter()) {
            $languageTag = JFactory::getLanguage()->getTag();
            $query .= " AND c.language IN (".$db->Quote($languageTag).", ".$db->Quote('*').") AND i.language IN (".$db->Quote($languageTag).", ".$db->Quote('*').") ";
        }
    }

    $db->setQuery($query);
    $IDs = $db->loadResultArray();

    $query = "SELECT tag.name, tag.id
    FROM #__k2_tags as tag
    LEFT JOIN #__k2_tags_xref AS xref ON xref.tagID = tag.id 
    WHERE xref.itemID IN (".implode(',', $IDs).") 
    AND tag.published = 1";
    $db->setQuery($query);
    $rows = $db->loadObjectList();
    $cloud = array();
    if (count($rows)) {

        foreach ($rows as $tag) {

            if (@array_key_exists($tag->name, $cloud)) {
                $cloud[$tag->name]++;
            } else {
                $cloud[$tag->name] = 1;
            }
        }

        $max_size = $params->get('max_size');
        $min_size = $params->get('min_size');
        $max_qty = max(array_values($cloud));
        $min_qty = min(array_values($cloud));
        $spread = $max_qty - $min_qty;
        if (0 == $spread) {
            $spread = 1;
        }

        $step = ($max_size - $min_size) / ($spread);

        $counter = 0;
        arsort($cloud, SORT_NUMERIC);
        $cloud = @array_slice($cloud, 0, $params->get('cloud_limit'), true);
        uksort($cloud, "strnatcasecmp");

        foreach ($cloud as $key=>$value) {
            $size = $min_size + (($value - $min_qty) * $step);
            $size = ceil($size);
            $tags[$counter]-> {'tag'} = $key;
            $tags[$counter]-> {'count'} = $value;
            $tags[$counter]-> {'size'} = $size;
            $tags[$counter]-> {'link'} = urldecode(JRoute::_(K2HelperRoute::getTagRoute($key)));
            $counter++;
        }

        return $tags;
    }
}
4

0 回答 0