Jump to content

[Résolu] Comment récupérer l'id de la catégorie en cours pour un module?


Recommended Posts

Bonjour,

 

Je suis en train de réaliser un module dans lequel le contenu est différent selon la catégorie.

J'aimerais pouvoir récupérer l'id de la catégorie en cours...

 

Je ne peux en effet pas faire de $_GET['id_category'] puisque l'url rewriting est utilisé...

 

Comment faire?

 

En vous remerciant :D

 

PS: Le top ça serait de pouvoir aussi récupérer la catégorie par défaut d'un produit...

Edited by em72 (see edit history)
Link to comment
Share on other sites

Le fait d'utiliser le rewrite n'empêche pas de récupérer les variables en GET.

 

Pour la catégorie par défaut, regarder dans la classe product si il y a une fontion pour ça sinon tu peux faire un truc comme ça:

Db::getInstance()->ExecuteS(select * from '._DB_PREFIX_.'product where id_product='.$product);

 

où $product est l'id de ton produit préalablement récupéré

Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

Bonjour.

 

Pour exécuter un bloc de code si nous sommes sur la catéorie avec l'ID souhaité, tout simplement :

 

{if $category->id == 'X'}

[i]CODE[/i]

{/if}

 

Où X est l'ID souhaité.

Cela marche à la fois sur la page de produit ou sur la page de catégorie.

 

Pour avoir la catégorie parente (dans le cas où il y a plusieurs niveau de profondeur), c'est : $category->id_parent

Il y a également moyen de connaître le niveau de profondeur ou de tester en fonction du nom.

 

N'hésitez pas à poster ici la façon dont vous avez procédé afin que cela puisse servir à d'autres ;)

  • Like 1
Link to comment
Share on other sites

Bonjour, du côté PHP en effet, moi c'est ce que je recherche en tout cas.

 

J'ai monmodule.php qui recupere des infos dans une table et si la page en cours est une page produit exemple

/prestashop/product.php?id_product=1065

 

je veux récupéré l'id de la catégorie ou sous catégorie actuellement parcourue.

 

Dans ma fonction get_info($block, $type){

global $cookie;

$id_lang = $cookie->id_lang;

$this_category = category->id; (pour reçupérer la catégorie en cours ? c'est ça)

[code....]

}

suis-je dans la bonne direction ?

Link to comment
Share on other sites

Tu écris un module, c'est ça ?

 

Tu peux utiliser un truc du type si tu veux récupérer la catégorie PAR DEFAUT du produit:

if(isset(Tools::getValue("id_product"))
{
  $produit=Tools::getValue("id_product");
  $categorie=Db::getInstance()->ExecuteS('select * from '._DB_PREFIX_.'product where id_product='.$produit);
  echo $categorie['id_category_default'];
}

 

J'ai pas testé mais je pense que ça doit marcher...

Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

Je comprends que tout le monde souhaite récupéré l'id catégorie du produit mais moi je souhaite récupéré l'id_catégorie de la page en cours.

 

Si un visiteur navigue le site dans la categorie /prestashop/ballons-rond/ballons-bleus/product.php?id_product=1065

je souhaite recupéré l'id de la catégorie /ballons-bleus/ sachant que le ballon rond et bleu appartien à la catégorie ballons et ballons bleus ce n'est pas la catégorie dans laquelle le ballon est inscrit qui m'intéresse mais la categorie dans laquelle le visiteur se situe.

 

Je pense que c'est plutôt à ça $cookie->id_categorie, je continue mes recherches.

 

Est-ce que ce serait interdit par la loi ?

Link to comment
Share on other sites

Je pense que l'idée de Siteprojet correspond au besoin mais l'idée de placer des conditions dans le .tpl est moins dynamique que de le placer dans le PHP.

 

Le .tpl sert a faire du html pas de la programmation il me semble.

 

Utiliser smarty pour faire des fonctions dans .tpl doit être plus gourmand que dans le .php selon ma logique.

 

De la a surcharger une classe pour afficher passer l'id de la catégorie en cours pourrait être une autre solution, j'avoue. Mais si il faut rechanger les classes a chaque que prestashop change de version on en finirait pas.

Edited by Julien Mayeux (see edit history)
Link to comment
Share on other sites

Bonjour.

 

Il n'y aura quasiment aucune différence de performance visible pour une opération aussi petite. Cela tient du centième de seconde.

 

Vous pouvez aussi tout simplement parser l'URL avec PHP, c'est atypique, mais bien plus simple. Ca marche aussi en Javascript remarquez...

Link to comment
Share on other sites

je m'attendais a ça bizarre, le soucis c'est que l'id category en cours j'en ai besoin dans mon php pour compiler un array() donc l'url est la seule solution rien de tres dynamique non plus puisque c'est l'id dont j'ai besoin dans la fiche produit.

 

I hate smarty. :(

 

Merci de ta réponse SiteProjet, je vais finir par trouver une solution.

Edited by Julien Mayeux (see edit history)
Link to comment
Share on other sites

Ce type d'url:

/prestashop/ballons-rond/ballons-bleus/product.php?id_product=1065

 

n'existe pas.

 

Soit vous naviguez avec des urls rewritées dans quel cas le produit s'affiche ainsi:

/prestashop/ballons-rond/ballons-bleus/mon_produit_ré_écrit

soit sans url rewritée:

http://www.monsite.com/product.php?id_product=1065

 

Smarty n'est effectivement là que pour afficher des variables mais l'avantage est que quand vous chargez une page elle contient une multitude de variables avec peut être celle qui vous convient.

dans une page produi, pour récupérer la catégorie il suffit de faire:

{$category->id_category}

 

De la a surcharger une classe pour afficher passer l'id de la catégorie en cours pourrait être une autre solution, j'avoue. Mais si il faut rechanger les classes a chaque que prestashop change de version on en finirait pas.

Le dossier override sert justement à ça, overrider une classe sans toucher au fichier original.

 

utilisez {debug} dans votre fichier product.tpl pour lister l'ensemble des variables chargées avec la page.

Edited by franckm1000 (see edit history)
  • Like 1
Link to comment
Share on other sites

Ça commence bien :)

 

“Smarty est un moteur de template pour le langage PHP. Il est rapide et permet la gestion des caches. Il facilite la séparation entre la logique applicative et la présentation.” Wikipedia

Link to comment
Share on other sites

Il va falloir que je surcharge une classe pour récupérer l'id de la catégorie en cours, je devrais augmenter le devis de mon projet.

 

L'URL c'est ça ; ça peut être n'importe quoi d'ailleurs, demain la catégorie change d'orthographe c'est pas un soucis et c'est bien pour ça qu'il ne faut pas passer par smarty pour faire de la logique un peu poussée sinon ça veut dire que tu ne peux meme plus utiliser le cache de smarty dans la config de prestashop.

 

Je vais me plonger dans la surcharge de la classe et je vous tiens au courant.

Edited by Julien Mayeux (see edit history)
Link to comment
Share on other sites

Est-ce que vous comprenez que j'en ai besoin dans le fichier PHP de mon modules est pas dans le .tpl , l'id de la catégorie en cours me permet de compiler un array() en PHP

exemple :

 

for($i=0; $i<$count; $i++)

$this->update_qty($ballon[$i]['id']);

foreach($ballon as $key => $value){

$this_category = $_GET['id_category'];

 

$current_category = ????????????

Edited by Julien Mayeux (see edit history)
Link to comment
Share on other sites

C'est moi qui vous ai amené vers smarty. Dès le départ franck vous a orienté vers le PHP. Ne confondez pas nos interventions. Du reste franck est bien plus compétent que moi concernant ce sujet ;)

 

Donc pour vous répondre clairement, pas d'utilisation de variables de smarty de cette façon côté PHP -_-

Link to comment
Share on other sites

Merci bien.

Savez-vous si je peux récupérer cette variable dans une classe smarty donc dans la couche inférieure du module ?

 

Comme ça peut être que j'arriverais à trouver une autre solution au probleme du catalogue qui pour moi lorsque je navigue dans les catégories du produit , si j'arrive sur la page produit, le bloc catégorie m'affiche les catégories comme si j'était arrive sur cette fiche produit en utilisant la catégorie par défault du produit au lieu de garder le bloc catégorie dans la catégorie en cours

 

exemple : ballon bleu num1 inscrit dans les catégories /ballons /ballons ronds/ballons bleus (default) et dans les catégories ballons football / ballons footballronds / ballons football bleus

 

si je passe par la catégorie football, lorsque je suis dans la page produit, le bloc catégorie croit que je suis passé par /ballons/ballons ronds/ballons bleus et non pas par /ballons football/etc...

 

ça aussi c'est un gros soucis de prestashop je trouve. Je ne connais pas de solutions pour ça.

 

Est-ce que c'est aussi un cas d'utilisation inapropriée de Prestashop ?

 

Si la réponse est oui alors je ne comprends pas pourquoi le gestionnaire du catalogue a le droit d'inscrire 1 produit dans plusieurs catégories parentes et sous catégories.

Edited by Julien Mayeux (see edit history)
Link to comment
Share on other sites

  • 1 year later...
  • 8 months later...

je partage, c'est pour une distri 1.3.1.1, je sais pas si c'est résolu dans les autres version de prestashop mais vous pouvez utiliser :

$cookie->last_visited_category;

 

Ohlala, merci pour l'astuce! 

Link to comment
Share on other sites

C'est toujours un plaisir d'avoir des retours, même pour dire merci plusieurs mois après. Ca peut égayer une journée :)

 

Ca fait toujours plaisir de trouver une astuce qui marche même si elle date de plusieurs mois. Ca égaye également une journée :)

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...