Plugin pre order product

  • Posts: 453
  • Thank you received: 31
  • Hikamarket Multivendor Hikashop Business
2 years 5 months ago #342000

Bonjour,

j'ai acheté et installé le plugin pre order product, mais je rencontre un souci

J'ai beau activer les champs personnalisés dans le bakend hikamarket, je ne voit pas le champ "quantité de précommande" dans l'édition de produit en front end, seulement dans le backend de joomla.

De plus, dans l'interface hikamarket, la quantité de précommande est visible dans le champ quantité, ce qui peut porter à confusion alors que dans le backend joomla, le champ de précommande est bien visible et le champ quantité affiche bien 0 même si la valeur réelle en bdd est celle de la précommande.

Est ce possible d'avoir ce champ quantité à zero dans hikamarket tel qu'il est dans le backend ?
Et l'affichage du champ quantité de précommande dans hikamarket ?

Merci d'avance pour votre aide

Last edit: 2 years 5 months ago by Minie.

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

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
2 years 5 months ago #342004

Bonjour,

1 - La version actuelle du plugin ne propose pas d'afficher son interface dans HikaMarket.
HikaShop propose un trigger de plugin pour ajouter des champs dans la section "custom fields", ce trigger n'est pas disponible pour HikaMarket puisque les champs ne sont pas vraiment des custom fields.
Il faut donc passer via le trigger pour rajouter des sections, ce qui peut faire étrange pour l'ajout d'un seul champs (comme pour ce plugin).

2 - Le fichier de traduction doit se trouve dans la partie "backend" du site web, sous le nom "plg_hikashop_productpreorder".

$this->loadLanguage('plg_hikashop_productpreorder', JPATH_ADMINISTRATOR);
CF : github.com/joomla/joomla-cms/blob/4.1.4/...n/CMSPlugin.php#L157

Le XML ne permet de définir que les fichiers qui seront prise en compte pour l'installation, durant l'installation. Une modification à postériori ne va pas être prise en compte.
Mais le plus simple pour vous reste d'ajouter vos traductions dans le fichier de surcharge de traduction d'HikaShop.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 453
  • Thank you received: 31
  • Hikamarket Multivendor Hikashop Business
2 years 5 months ago #342035

Super, merci

y a t'il un moyen propre depuis mon plugin perso hikashop d'agir sur l'interface d'édition de produit hikamarket juste pour mettre la quantité à 0 avec éventuellement un icone "précommande activée" à coté ?

j'ai fait un plugin perso pour éviter à mon client d'avoir à gérer le stock de précommande, que ce soit automatique pour une catégorie car il fait des objets artisanaux sur commande.

J'aurais aimé agir en JS sur la case product_quantity et ajouter un message comme "précommande activée" à coté, pour pouvoir le retirer si le vendeur change la quantité, je souhaite donc loader mon fichier js sur la vue Edition de produit hikamarket, le souci c'est qu'il me faudrait mettre un trigger (comme onBeforeCompileHead) dans un plugin hikamarket et non hikashop puisque les plugins hikashop ne se chargent pas à l'édition de produit hikamarket

ci dessous mon plugin

<?php
defined('_JEXEC') or die;

class plgHikashopHika_preorder_stock_auto extends JPlugin
{
	
	function onAfterProductCreate(&$product) {
		
		$productClass	= hikashop_get('class.product');
		$db				= JFactory::getDbo();
		
		$categories		= self::getCategoriesIdWithChilds($this->params->get('cat', ''));
		if(array_intersect($categories, $product->categories)){
			if($product->product_quantity == 0){
				$query = $db->getQuery(true);
				$fields = array(
					$db->quoteName('product_quantity').' = '.$db->quote($this->params->get('qty', 0)),
					$db->quoteName('product_preorder').' = '.$db->quote($this->params->get('qty', 0))
				);
				$conditions = array(
					$db->quoteName('product_id').' = '.$db->quote($product->product_id)
				);
				$query->update($db->quoteName('#__hikashop_product'))->set($fields)->where($conditions);
				$db->setQuery($query);
				$result = $db->execute();
			}
			else{
				$query = $db->getQuery(true);
				$fields = array(
					$db->quoteName('product_preorder').' = '.$db->quote(0)
				);
				$conditions = array(
					$db->quoteName('product_id').' = '.$db->quote($product->product_id)
				);
				$query->update($db->quoteName('#__hikashop_product'))->set($fields)->where($conditions);
				$db->setQuery($query);
				$result = $db->execute();
			}
		}
		
	}
	
	function  onAfterProductUpdate(&$product){
		
		$productClass	= hikashop_get('class.product');
		$db				= JFactory::getDbo();
		
		$categories		= self::getCategoriesIdWithChilds($this->params->get('cat', ''));
		if(array_intersect($categories, $product->categories)){
			if($product->product_quantity == 0){
				$query = $db->getQuery(true);
				$fields = array(
					$db->quoteName('product_quantity').' = '.$db->quote($this->params->get('qty', 0)),
					$db->quoteName('product_preorder').' = '.$db->quote($this->params->get('qty', 0))
				);
				$conditions = array(
					$db->quoteName('product_id').' = '.$db->quote($product->product_id)
				);
				$query->update($db->quoteName('#__hikashop_product'))->set($fields)->where($conditions);
				$db->setQuery($query);
				$result = $db->execute();
			}
			else{
				$query = $db->getQuery(true);
				$fields = array(
					$db->quoteName('product_preorder').' = '.$db->quote(0)
				);
				$conditions = array(
					$db->quoteName('product_id').' = '.$db->quote($product->product_id)
				);
				$query->update($db->quoteName('#__hikashop_product'))->set($fields)->where($conditions);
				$db->setQuery($query);
				$result = $db->execute();
			}
		}
	
	}
	
	function  onAfterOrderUpdate(&$order,&$send_email) { 
	
		$db				= JFactory::getDBO();
		$config			=& hikashop_config();
		$confirmed		= $config->get('order_confirmed_status');
		$cancelled		= $config->get('order_cancelled_status');
		$orderClass		= hikashop_get('class.order');
		$productClass	= hikashop_get('class.product');
		$orderInDb		= $orderClass->loadFullOrder($order->order_id);

		if(!isset($order->order_status))
			return true;
		if(!empty($order->order_type) && $order->order_type != 'sale')
			return true;
		if($order->order_status != $confirmed) {
			return true;
		}
		if(isset($order->old->order_status) && $order->old->order_status == $confirmed) {
			return true;
		}

		if($order->order_status == $confirmed AND $order->old->order_status != $cancelled){
			
			$db->setQuery('SELECT * FROM #__hikashop_order_product WHERE order_id = '.$order->order_id);
			$products = $db->loadAssocList();

			foreach($products as $product){
				$product = json_decode(json_encode($product));
				
				$categories		= self::getCategoriesIdWithChilds($this->params->get('cat', ''));
				if(array_intersect($categories, $product->categories)){
					if($product->product_quantity == 0){
						$query = $db->getQuery(true);
						$fields = array(
							$db->quoteName('product_quantity').' = '.$db->quote($this->params->get('qty', 0)),
							$db->quoteName('product_preorder').' = '.$db->quote($this->params->get('qty', 0))
						);
						$conditions = array(
							$db->quoteName('product_id').' = '.$db->quote($product->product_id)
						);
						$query->update($db->quoteName('#__hikashop_product'))->set($fields)->where($conditions);
						$db->setQuery($query);
						$result = $db->execute();
					}
					else{
						$query = $db->getQuery(true);
						$fields = array(
							$db->quoteName('product_preorder').' = '.$db->quote(0)
						);
						$conditions = array(
							$db->quoteName('product_id').' = '.$db->quote($product->product_id)
						);
						$query->update($db->quoteName('#__hikashop_product'))->set($fields)->where($conditions);
						$db->setQuery($query);
						$result = $db->execute();
					}
				}
			}
			
		}
		
	}
		
	function getCategoriesId($root){
		
		$db = JFactory::getDBO();
		
		$query = 'SELECT category_id FROM #__hikashop_category WHERE category_published = 1 AND category_parent_id = '.$root.' ORDER BY category_left ASC';
		$db->setQuery($query);
		$items = $db->loadColumn();

		return $items;
			
	}
	
	function getCategoriesIdWithChilds($root = 1, $withRoot = true){
		
		$list	= self::getCategoriesId($root);
		$catids	= array();
		
		if($withRoot == true){
			$catids[] = $root;
		}
		if(!empty($list)){
			foreach($list as $item){
				if(!in_array($item, $catids)){
					$catids[] = $item;
				}
				if(count(self::getCategoriesId($item))){
					$catids = array_merge($catids, self::getCategoriesIdWithChilds($item));
				}
			}
		}

		return array_unique($catids);
			
	}
	
}

Merci d'avance

Last edit: 2 years 5 months ago by Minie.

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

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
2 years 5 months ago #342055

Bonjour,

Je faisais référence à ce trigger ci :
www.hikashop.com/support/documentation/1...ProductBlocksDisplay
Qui propose également de faire l'intégration avec le système d'ACL :
www.hikashop.com/support/documentation/1...rketAclPluginListing

Je vous conseille plutôt les trigger "onBefore" plutôt que "onAfter", vous permettant d'influer sur les données avant la sauvegarde.
Il est également conseillé de regarder le contenu de l'objet du trigger afin de ne pas faire d'action si jamais le produit est modifié par autre chose que l'édition produit (mise à jour du compteur de vue produit, etc.)

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

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

  • Posts: 453
  • Thank you received: 31
  • Hikamarket Multivendor Hikashop Business
2 years 5 months ago #342056

Bonjour,

merci pour la réponse.
J'ai fait le code JS qui agit sur l'interface d'édition de produit, mon seul souci c'est que je dois charger mon js manuellement hors du plugin alors que j'aurais aimé l'intégrer à mon plugin, le problème c'est que mon plugin hikashop n'est pas appelé sur la vue édition de produit hikamarket.

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

  • Posts: 453
  • Thank you received: 31
  • Hikamarket Multivendor Hikashop Business
2 years 5 months ago #342066

Bonjour,

j'ai passé la totalité de mon plugin en plugin hikamarket au lieu de hikashop et tout est ok, toutes les fonctions sont bien remplies sans avoir à charger manuellement quoi que ce soit.

Merci pour votre aide, le sujet est résolu :)

The following user(s) said Thank You: Jerome

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

Time to create page: 0.045 seconds
Powered by Kunena Forum