Jump to content

Nouvelle page - Nouveau controller


Recommended Posts

Bonjour,

 

Je cherche à rajouter une page dans prestashop qui affiche les produits packs.

J'ai donc procédé de la façon suivante :

 

Une nouvelle page product-pack.php dans la racine du site avec dedans :

require(dirname(__FILE__).'/config/config.inc.php');
ControllerFactory::getController('ProductPackController')->run();

 

J'ai rajouté un ProductPackController dans le bon dossier. Dedans j'appelle la méthode getProducts que j'ai surchargée dans le dossier Override. Jusque là je produit bien le résultat escompté.

Je parviens à afficher la liste des produits en packs MAIS lorsque je clique sur le lien de l'article je reste sur ma page. Le lien ne pointe pas vers la page article.

Pourtant dans le displaycontent du controller :

public function displayContent() {
 parent::displayContent();
 self::$smarty->display(_PS_THEME_DIR_.'product-packs.tpl');			  
}

 

Dans le template Smarty :

{capture name=path}{l s='Package List'}{/capture}
{include file="$tpl_dir./breadcrumb.tpl"}
{include file="$tpl_dir./search_an.tpl"}
<h1>{l s='Package List'}</h1>
{if $products}
  {include file="$tpl_dir./product-sort.tpl"}
  {include file="$tpl_dir./product-list.tpl" products=$products}
  {include file="$tpl_dir./pagination.tpl"}
{else}
  <p class="warning">{l s='No packages.'}</p>
{/if}

 

Donc en somme je devrai me retrouver avec le template product-list.tpl qui intercepte la liste des produits, ce qu'il semble se produire hors mis ce problème qui ne renvoie pas vers la page de détail d'un article.

 

Merci d'avance de votre aide.

Link to comment
Share on other sites

Bonjour,

 

As-tu activé le mode développement ? As-tu un ou des messages d'erreur ?

 

J'ai rajouté un ProductPackController dans le bon dossier. Dedans j'appelle la méthode getProducts que j'ai surchargée dans le dossier Override.

 

 

Si tu as créé ton fichier ProductPackController dans le dossier controllers/ pourquoi définis-tu la méthode getProducts dans le dossier /override ?

Link to comment
Share on other sites

Bonjour,

 

En fait j'ai suivi le cheminement de la page new-products et j'ai tenté de faire pareil.

Me conseilleriez vous de mettre la requête directement dans le productpackcontroller sans passer par un overide du Product.php?

 

Merci de votre réponse présente et future.

Link to comment
Share on other sites

Si tu surcharges la fonction getProducts de la class Product.php, c'est bien dans le dossier override/classes/ qu'il faut créer un fichier Product.php et redéfinir la fonction.

 

Peux-tu nous donner le code de la fonction getProducts() que tu as redéfinis ?

Link to comment
Share on other sites

voili voilou :

define('_CUSTOMIZE_FILE_', 0);
define('_CUSTOMIZE_TEXTFIELD_', 1);
class Product extends ProductCore {
public static function getProducts($id_lang, $start, $limit, $orderBy, $orderWay, $id_category = false, $only_active = false, $cache_is_pack = false, $count =false) {
	if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay))
		die(Tools::displayError());
	if (!Validate::isBool($cache_is_pack) OR !Validate::isBool($count))
		die(Tools::displayError());
	if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add')
		$orderByPrefix = 'p';
	elseif ($orderBy == 'name')
		$orderByPrefix = 'pl';
	elseif ($orderBy == 'position')
		$orderByPrefix = 'c';
	if ($start < 0)
		$start = 0;
	if (!$count) {
		$query = 'SELECT p.*, pl.* , t.`rate` AS tax_rate, m.`name` AS manufacturer_name, s.`name` AS supplier_name
 FROM `' . _DB_PREFIX_ . 'product` p
 LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product`)
 LEFT JOIN `' . _DB_PREFIX_ . 'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
  AND tr.`id_country` = ' . (int) Country::getDefaultCountryId() . '
  AND tr.`id_state` = 0)
 LEFT JOIN `' . _DB_PREFIX_ . 'tax` t ON (t.`id_tax` = tr.`id_tax`)
 LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
 LEFT JOIN `' . _DB_PREFIX_ . 'supplier` s ON (s.`id_supplier` = p.`id_supplier`)' .
				($id_category ? 'LEFT JOIN `' . _DB_PREFIX_ . 'category_product` c ON (c.`id_product` = p.`id_product`)' : '') . '
 WHERE pl.`id_lang` = ' . (int) ($id_lang) .
				($id_category ? ' AND c.`id_category` = ' . (int) ($id_category) : '') .
				($only_active ? ' AND p.`active` = 1' : '') .
				($cache_is_pack ? ' AND p.`cache_is_pack` = 1 ' : ' AND p.`cache_is_pack` = 0') . '
 ORDER BY ' . (isset($orderByPrefix) ? pSQL($orderByPrefix) . '.' : '') . '`' . pSQL($orderBy) . '` ' . pSQL($orderWay) .
				($limit > 0 ? ' LIMIT ' . (int) ($start) . ',' . (int) ($limit) : '');
		$rq = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($query);
		if ($orderBy == 'price')
			Tools::orderbyPrice($rq, $orderWay);
		return ($rq);
	}else {
		$query =
				'SELECT COUNT(DISTINCT p.`id_product`) AS nb
			FROM `' . _DB_PREFIX_ . 'product` p
 LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product`)
 LEFT JOIN `' . _DB_PREFIX_ . 'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
			AND tr.`id_country` = ' . (int) Country::getDefaultCountryId() . '
			AND tr.`id_state` = 0)
 LEFT JOIN `' . _DB_PREFIX_ . 'tax` t ON (t.`id_tax` = tr.`id_tax`)
 LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
 LEFT JOIN `' . _DB_PREFIX_ . 'supplier` s ON (s.`id_supplier` = p.`id_supplier`)' .
				($id_category ? 'LEFT JOIN `' . _DB_PREFIX_ . 'category_product` c ON (c.`id_product` = p.`id_product`)' : '') . '
 WHERE pl.`id_lang` = ' . (int) ($id_lang) .
				($id_category ? ' AND c.`id_category` = ' . (int) ($id_category) : '') .
				($only_active ? ' AND p.`active` = 1' : '') .
				($cache_is_pack ? ' AND p.`cache_is_pack` = 1' : ' AND p.`cache_is_pack` = 0') . '
			)';
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query);
		return (int) ($result['nb']);
	}
}
}

 

Dans le principe je rajoute la possibilité de filtrer sur les packs et de compter ces derniers.

Par défaut ces options sont à false et non obligatoires et ne devraient pas altérer le reste du focntionnement.

Link to comment
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
×
×
  • Create New...