Jump to content

Recommended Posts

Bonjour à tous (et toutes) !

 

Je recherche à créer une page dédiée à afficher en liste tous les tags en vigueur dans ma boutique.
N'étant pas programmeur, je patauge un peu :)

Je pense que cette fonctionnalité peut intéresser d'autres, notamment pour du SEO ... (à voir)

 

Mon install est en 1.5.3.1.

 

Par tatonnement, j'en suis arrivé au principe qu'il fallait créer un controller:

(attention la suite peut piquer les yeux :ph34r: )

 

override/controllers/front/TagsController.php

<?php class TagsController extends FrontController {

/**
 *  Initialize controller
 *  @see FrontController::init()
 */
public function init() {
    parent::init();
}

/**
 *  Assign template vars related to page content
 *  @see FrontController::initContent()
 */
public function initContent() {
    parent::initContent();

    $this->setTemplate(_PS_THEME_DIR_.'tags.tpl');
}

}

puis dans themes:

 

themes/montheme/tags.tpl

<div id="center_column" class="center_column grid_24">
<div class="block">
	<h4>{l s='Tags'}</h4>
	<p class="block_content">
	
	<ul id="tags_list">
				{foreach from=$tags item=tag name=myLoop}
					<li value="{$base_dir}search.php?tag={$tag.name|urlencode}">{$tag.name}</li>
				{/foreach}
				</ul>
	

	</p>
</div>

évidemment je reste totalement sur ma faim, tout ceci n'aboutissant à rien du tout...

 

si quelqu'un plus intelligent peut me donner un coup de pouce, ce serait un grand pas en avant pour moi et je l'espère bien d'autres encore ! :lol:

Edited by Avid (see edit history)

Share this post


Link to post
Share on other sites

Je reviens en paix !

 

J'ai tenté une autre méthode.
La création d'un module sur la base d'un existant, celui de blocktags.

 

Cela passe par

  1. une modification du module dupliqué,
    pour l'essentiel voir ci dessous. cf. function getallTags
    /**
    	* Returns module content for my own personal hook
    	*
    	* @param array $params Parameters
    	* @return string Content
    	*
    	*/
    	function hookhook_tags($params)
    	{
    		$tags = Tag::getallTags((int)($params['cookie']->id_lang));
    		
    
    
  2. la création d'un hook dédiée qui est ensuite appelé par un fichier theme .tpl.
  3. un override de la classe Tag en créant la nouvelle fonction getallTags, voir ci-dessous
class Tag extends TagCore
{
	public static function getallTags($id_lang, $nb = 10000)
	{
		$groups = FrontController::getCurrentCustomerGroups();
		$sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');

		return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
		SELECT t.name, COUNT(pt.id_tag) AS times
		FROM `'._DB_PREFIX_.'product_tag` pt
		LEFT JOIN `'._DB_PREFIX_.'tag` t ON (t.id_tag = pt.id_tag)
		LEFT JOIN `'._DB_PREFIX_.'product` p ON (p.id_product = pt.id_product)
		'.Shop::addSqlAssociation('product', 'p').'
		WHERE t.`id_lang` = '.(int)$id_lang.'
		AND product_shop.`active` = 1
		AND product_shop.`id_product` IN (
			SELECT cp.`id_product`
			FROM `'._DB_PREFIX_.'category_group` cg
			LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
			WHERE cg.`id_group` '.$sql_groups.'
		)
		GROUP BY t.id_tag
		ORDER BY times DESC
		LIMIT 0, '.(int)$nb);
	}
}

et voila

wow j'ai tellement appris!!! :rolleyes:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More