Création d'un plugin de champ personnalisé pour point-relais DPD

  • Posts: 12
  • Thank you received: 0
7 years 5 months ago #271668

-- HikaShop version -- : 2.6.3
-- Joomla version -- : 3.7.2
-- PHP version -- : 7.0
-- Browser(s) name and version -- : Firefox 53.0.3 (64 bits)
-- Error-message(debug-mod must be tuned on) -- : Notice: Trying to get property of non-object in /var/www/clients/client2/web16/web/administrator/components/com_hikashop/views/order/tmpl/show_additional.php on line 79

Bonjour, je suis actuellement en train de développer un plugin hikashop en reprenant pour exemple le plugin mondialrelay qui permet de sélectionner un point relais via un champ personnalisé dédié dans le "checkout".
J'ai procédé de la même manière que cet exemple : Mondialrelaymondialrelay

Je rencontre des difficultés pour configurer l'affichage de ce plug in en front-end et dans le panneau d'administration après le passage d'une commande.
J'ai une fonction toute prête : displayPickupPoints() qui fonctionne lorsque je le met dans une fonction onBeforeCheckoutStep($controller, &$go_back, $original_go_back), mais je n'ai aucune idée de comment faire afficher mes points relais dans le champ personnalisé "DPD relais" dans la section "Informations complémentaires"
Voici ce que j'aimerai obtenir :



Voici ma configuration du champ personnalisé :


La valeur du point-relais choisi par l'utilisateur est transmise à la page courante en ajax via une méthode post, et la variable s'appelle :
$_POST['pickup_id']
Lors du choix du point-relais je souhaite affecter cette valeur du point-relais choisi à ce champ personnalisé, comment puis-je l'affecter ?
$orderData = $app->getUserState( HIKASHOP_COMPONENT.'.checkout_fields');
var_dump($orderData->pickup);
me retourne :
string(0) ""
Existe-t-il une méthode set() pour ce champs personnalisé ?

Ce que j'attends de mon plugin sera aussi de mentionner dans le panneau d'administration de commande le numéro du point-relais choisi pour une commande dans la valeur du champ personnalisé "Point relais DPD" :


Pour information voici le code de mon plugin :
class plgHikashopDpdpickup extends JPlugin
{
	/**
	 *
	 */
	

	public function __construct(&$subject, $config) {
		parent::__construct($subject, $config);

		$this->loadLanguage('plg_hikashop_dpdpickup', JPATH_ADMINISTRATOR );
	}

	/**
	 *
	 */

	public function onFieldsLoad(&$externalValues) {
		$me = new stdClass();
		$me->name = 'dpdpickup';
		$me->text = 'Sélecteur point relais DPD';
		$me->options = array('required', 'default', 'columnname', 'format', 'allow', 'dpdpickup_options');

		$fields[] = $me;

		$opt = new stdClass();
		$opt->name = 'dpdpickup_options';
		$opt->text = 'Point relais DPD';
		

		$options[$opt->name] = $opt;
	}

       public function displayPickupPoints() {
           //Return html code which contains the DPD pickup list as you can see in the first screen at the top of this topic
           //Cette fonction retourne la liste des points-relais DPD tels que vous pouvez le voir dans la première image en haut de ce topic
           return $html;
      }
}

Last edit: 7 years 5 months ago by skorweb.

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

  • Posts: 82868
  • Thank you received: 13378
  • MODERATOR
7 years 5 months ago #271685

Bonjour,

Si vous voulez utiliser l'API checkout pour faire l'affichage, c'est une bonne idée.
Mais si vous voulez faire un affichage comme Mondial relai, je vous recommande plutôt de passer par un type de champs personnalisé comme vous avez commencé à faire. Il suffit de faire comme le plugin mondial relai, avec un fichier mondialrelay_class.php qui est require par le fichier principal du plugin, et qui contient une class qui permet l'affichage et la gestion votre champs personnalisé. Dans la fonction display($field, $value, $map, $inside, $options = '', $test = false, $allFields = null, $allValues = null), vous faites appel à displayPickupPoints(), dans la fonction check(&$field, &$value, $oldvalue), vous récupérer la variable $_POST pour la stocker dans la variable $value
et ensuite HikaShop fera la sauvegarde automatiquement pour vous dans la commande.
Donc pas besoin de passer par la session, etc.
Vous pouvez également regarder le plugin plugins/hikashop/datepickerfield qui permet de rajouter le type de champs personnalisé "advanced date picker". Il contient nottamment une fonction "check" alors que le plugin mondial relai n'en contient pas car le javascript de mondial relai se charger de stocker le point relai sélectionné directement dans l'input du champs personnalisé.

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

Time to create page: 0.057 seconds
Powered by Kunena Forum