Intégration - code php lié au bouton

  • Posts: 23
  • Thank you received: 0
8 years 1 month ago #251157

Bonjour,

Je viens de mettre à jour ma version Hikashop d'Essential à Business.

Je souhaiterais au moment du click sur le bouton "Ajouter au Panier" ajouter du code PHP supplémentaire afin de mettre à jour une table (autre qu'Hikashop) dans la base de donnée.

Pouvez-vous m'aiguiller vers le fichier et la partie de code à adapter afin de réaliser cette opération ?

En vous remerciant pour votre aide,
David Filip

Please Log in or Create an account to join the conversation.

  • Posts: 82867
  • Thank you received: 13374
  • MODERATOR
8 years 1 month ago #251162

Bonjour,

Idéalement, il faudrait faire un petit plugin implémentant le trigger onAfterCartUpdate d'HikaShop:
www.hikashop.com/support/documentation/6...ml#onAfterCartUpdate

Faire un plugin n'est pas très compliqué si vous êtes un développeur:
www.hikashop.com/support/documentation/6...mentation.html#howto

Please Log in or Create an account to join the conversation.

  • Posts: 23
  • Thank you received: 0
8 years 1 month ago #251380

Merci Nicola pour votre réponse.

Effectivement, vous avez vraiment apporté un soin particulier à votre développement et à la structure globale du produit. Bon boulot!
J'ai mis en oeuvre un plugin et cela fonctionne parfaitement. Je suis occupé à voir avec Cyril d'iCagenda un mariage possible entre vos deux produits.

J'ai à peu près tout ce qu'il me faut dans HK pour gérer les événements sans perdre pour autant la possibilité de réaliser des upsells. Il y a un exemple donné sur votre site pour l'inscription à un événement mais cela ne permet plus l'ajout d'autres produits dans le panier.

Pourrais-tu m'expliquer comment faire ou quoi développer assez simplement en php pour une fois arrivé au processus de validation de commande, je puisse identifier les événements dans le panier (j'ai ajouté un champ personnalise booléen isEvent au produit) et introduire dans la chaîne entre par exemple Panier et Adresse Livraison/Facturation une étape où on pourrait inscrire les noms des personnes présentes à l'événement fonction de la valeur Qty du "produit-événement"?
A défaut, serait-ce possible avec HikaSerial : un ticket assigné à un nom que l'on introduit et ce sans perdre la possibilité d'ajouter d'autres produits dans le panier ?

Merci pour vos éclairages,
David

Please Log in or Create an account to join the conversation.

  • Posts: 82867
  • Thank you received: 13374
  • MODERATOR
8 years 1 month ago #251383

Bonjour,

Pour ajouter des étapes dans le système de passage en caisse, l'idéal c'est d'utiliser les triggers de l'API checkout:
www.hikashop.com/support/documentation/6...tation.html#checkout
comme cela, il suffit ensuite d'ajouter la vue dans le "checkout workflow" de la configuration pour que le plugin soit appeler pour l'affichage dans le passage en caisse.
Pour récupérer le contenu du panier, cela se fait facilement avec la fonction loadFullCart comme expliqué dans la documentation développeur:
www.hikashop.com/support/documentation/6...umentation.html#code
Donc cela laisse toutes les libertés possibles. Et pour stocker les informations dans la commande, cela peut se faire par exemple avec un champs personnalisé de la table "commande" ou "article".

Please Log in or Create an account to join the conversation.

  • Posts: 23
  • Thank you received: 0
8 years 1 month ago #251413

Merci pour ta réponse Nicolas.

J'ai bien intégré la nouvelle étape dans le passage en caisse et cela fonctionne parfaitement.
L'étape en question m'affiche HIKASHOP_CHECKOUT_PLG.SHOP.VIEWNAME dans l'onglet.
Je ne vois pas très bien ce que je dois faire ici :
- dois-je créer un plugin supplémentaire pour la vue en question ?
- le nom affiché dans l'onglet n'est pas celui que j'ai assigné dans le tableau : $list = 'Infos des participants';

Pourrais-tu m'aiguiller sur la manière de construire cette vue ?

En te remerciant,
David

Please Log in or Create an account to join the conversation.

  • Posts: 12953
  • Thank you received: 1778
8 years 1 month ago #251422

Bonjour David,

Pour créer la vue en question, il suffira simplement d'ajouter un fichier PHP à ton plugin ayant comme nom : NomDeTonPlugin_view.php

Voici un example pouvant surement t'aider :

	/**
	 *  Création de l'étape propre au plugin
	 */
	public function onCheckoutStepList(&$list) {
		//add step on checkout workflow
		$list['plg.shop.mynewstep'] = JText::_("PARTICIPANT_INFO');
	}

	/**
	 *	Affichage de la vue NomDeTonPlugin_view.php lors de l'appel de l'étape 'plg.shop.mynewstep'
	 */
	function onCheckoutStepDisplay($layoutName, &$html, &$view, $pos, $options) {
		if($layoutName != 'plg.shop.mynewstep')
			return;

		// appel NomDeTonPlugin_view.php
		ob_start();
		$this->showPage('view');
		$html = ob_get_clean();
	}

Please Log in or Create an account to join the conversation.

  • Posts: 23
  • Thank you received: 0
8 years 1 month ago #251496

Mohamed, je te remercie pour ta réponse.

1) Au travers de mon plugin, j'arrive à correctement utiliser la méthode onCheckoutStepDisplay.
Par contre, je n'arrive pas à faire en sorte d'avoir le nom exact dans le nouvel onglet du workflow (voir fichier attaché).
Je pense que quelque chose m'échappe dans l'ajout du nom dans le tableau $list :

$list['plg.shop.mynewstep'] = JText::_("PARTICIPANT_INFO');
Précédemment, j'avais créé une vue php dans le répertoire Checkout en récupérant le fichier fiels.php que j'ai renommé en fields_df.php
Ensuite, j'ai introduit dans la liste :
$list['plg.shop.fields_df'] = 'Liste des participants';
Dans la partie Configuration->Passage en caisse : Je retrouve bien l'étape "Liste des participants".
Dans la partie site, la méthode onCheckoutStepDisplay fonctionne correctement (voir le listage de quelques propriétés produit dans jpg) mais pour le nom dans l'onglet de l'étape, je sèche... A quel moment, fait-on la connexion entre la vue (php) et la liste ?
Et c'est là que j'ai besoin de ton aide :)
Peux-tu me dire où je me trompe ?

2) J'aimerais également sur base d'une variable pouvoir rendre visible ou invisible cette nouvelle étape. J'ai essayé dans la méthode onCheckoutStepList de vider l'array par un unset mais rien n'y fait. J'imagine qu'il faut agir sur le view step.php mais je ne vois pas trop où je pourrais placer ma condition (probablement en plusieurs endroits). Peux-tu m'éclairer ?

Merci à toi,
David

Attachments:
Last edit: 8 years 1 month ago by david_filip@hotmail.com.

Please Log in or Create an account to join the conversation.

  • Posts: 82867
  • Thank you received: 13374
  • MODERATOR
8 years 1 month ago #251521

Bonjour,

1. Le nom de l'étape est généré automatiquement. Donc il suffit d'ajouter un override de traduction:
HIKASHOP_CHECKOUT_PLG.SHOP.VIEWNAME="Nom de mon étape"
via l'onglet Langues de la configuration HikaShop.
C'est converti dans le fichier "step" de la view "checkout":

if($k == $this->step || empty($link)) {
							echo JText::_('HIKASHOP_CHECKOUT_'.strtoupper($step_name));
						} else {
?>
						<a href="<?php echo hikashop_completeLink('checkout&task=step&step='.$k.$url_itemid);?>">
							<?php echo JText::_('HIKASHOP_CHECKOUT_'.strtoupper($step_name));?>
						</a>
<?php
						}

2. Il n'est pas possible de supprimer une étape dynamiquement. Par contre, il est possible de la faire passer automatiquement.
Pour cela, dans onBeforeCheckoutStep vous pouvez faire votre vérification et soit rediriger vers l'étape d'après avec un $app->redirect() avec le paramètre step incrémenté dans l'URL, soit en ajoutant à la vue un peu de JS pour auto submit l'étape au chargement de la page plutôt que d'afficher le contenu de votre vue.

Please Log in or Create an account to join the conversation.

Time to create page: 0.087 seconds
Powered by Kunena Forum