Fonction save product

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

Bonjour,

j'utilise régulièrement la fonction save de la class product, et aujourd'hui elle me renvoie une erreur :
Error: Call to a member function get() on null: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ORDER BY category_id DESC LIMIT 1)' at line 1

Voici le bout de code :

if(!@include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikashop'.DS.'helpers'.DS.'helper.php')){ return false; }
$productClass	= hikashop_get('class.product');
$Hconfig		= hikashop_config();

$product = new stdClass();

$db->setQuery('SELECT product_id FROM #__hikashop_product WHERE product_code = "'.trim($item['superproduct'].'"'));
$parent_id = $db->loadResult();
if(!empty($parent_id)){
	$product->product_parent_id		= $parent_id;
}
else{
	$product->product_parent_id		= 0;
}

$product->product_name				= trim($item['name_fr']);

if(empty($item['stocklevel']) OR $item['stocklevel'] == '-1'){ $product->product_quantity = 0; }
else{ $product->product_quantity	= $item['stocklevel']; }

$product->product_code				= $product_code;

$product->product_published	= intval($item['isavailable']);

if(trim($item['taxclass']) == 'none'){
	$product->product_tax_id		= 21;
}
elseif(trim($item['taxclass']) == 'normal'){
	$product->product_tax_id		= 19;
}
elseif(trim($item['taxclass']) == 'reduced'){
	$product->product_tax_id		= 20;
}
elseif(trim($item['taxclass']) == 'reduced2'){
	$product->product_tax_id		= 22;
}
elseif(trim($item['taxclass']) == 'superreduced'){
	$product->product_tax_id		= 23;
}

if($product->product_parent_id == 0){
	$product->product_type			= 'main';
}
else{
	$product->product_type			=  'variant';
}

$product->product_vendor_id			= 1;

$product->product_keywords			= trim($item['keywords_fr']);

$product->product_weight			= intval($item['weight']);
$product->product_weight_unit		= 'g';

$product->product_dimension_unit	= 'mm';
$product->product_width				= intval($item['width']);
$product->product_length			= intval($item['length']);
$product->product_height			= intval($item['height']);

$product->product_max_per_order		= 0;

$product->product_access			= 'all';

$product->product_group_after_purchase	= '';

$product->product_min_per_order		= intval($item['minorder']);

$product->product_page_title		= $product->product_name;

$product->product_alias				= JFilterOutput::stringURLSafe($product->product_name).'-'.$product_code;

$product->product_description		= $item['text_fr'];
$product->product_meta_description	= $item['text_fr'];

$price = new stdClass();
if(!empty($item['manufacturerprices_eur_net'])){
	$price->price_value				= str_replace(',', '.', $item['manufacturerprices_eur_net']);
}
else{
	$price->price_value				= str_replace(',', '.', $item['listprices_eur_net']);
}
$price->price_currency_id		= 1;
$price->price_min_quantity		= 0;
$product->prices				= array($price);

$product->categories	= array(2);

$product_id = $productClass->save($product);

Je ne comprends pas pourquoi, il n'est même pas question des catégories dans la fonction save

Merci d'avance

Last edit: 2 years 2 months ago by Minie.

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
2 years 2 months ago #344994

Bonjour,

Difficile de dire quoi que ce soit avec juste cette mini erreur. En plus la fonction save appelle d'autres fonction, déclenche des évènements pour les plugins, qui à leur tour peuvent faire des requêtes MySQL ou appeler d'autres fonctions, etc.
Activez l'option "debug" de la configuration Joomla et refaites la procédure. Vous devriez avoir un message d'erreur avec le callstack et notamment le fichier et la ligne d'où la requête avec le souci est exécutée.

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

  • Posts: 453
  • Thank you received: 31
  • Hikamarket Multivendor Hikashop Business
2 years 1 month ago #345131

Bonjour,

j'etais pourtant en mode debug au moment de lancer mon script, je n'ai aucune info de plus. :(

Je tiens à préciser que la ligne produit est quand même créée dans la table product (si ca peut donner un indice sur l'endroit de l'erreur)

EDIT :
J'ai désactivé le fichier error de mon template j'ai maintenant le classique carré rouge avec toutes les infos :
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ORDER BY category_id DESC LIMIT 1)' at line 1
/libraries/joomla/database/driver/mysqli.php:668

Call stack
# Function Location
1 () JROOT/libraries/joomla/database/driver/mysqli.php:668
2 JDatabaseDriverMysqli->execute() JROOT/plugins/system/falangdriver/falang_database.php:105
3 JFalangDatabase->execute() JROOT/libraries/joomla/database/driver.php:1701
4 JDatabaseDriver->loadObjectList() JROOT/plugins/system/falangdriver/falang_database.php:282
5 JFalangDatabase->loadObjectList() JROOT/plugins/system/falangdriver/falang_database.php:416
6 JFalangDatabase->loadObject() JROOT/plugins/system/falangdriver/falang_database.php:351
7 JFalangDatabase->_loadObject() JROOT/plugins/system/falangdriver/falang_database.php:143
8 JFalangDatabase->loadResult() JROOT/plugins/system/product_layout/product_layout.php:176
9 plgSystemProduct_layout->setLayoutProduct() JROOT/plugins/system/product_layout/product_layout.php:290
10 plgSystemProduct_layout->onAfterProductCreate() JROOT/libraries/joomla/event/event.php:70
11 JEvent->update() JROOT/libraries/joomla/event/dispatcher.php:160
12 JEventDispatcher->trigger() JROOT/libraries/src/Application/BaseApplication.php:108
13 Joomla\CMS\Application\BaseApplication->triggerEvent() JROOT/administrator/components/com_hikashop/classes/product.php:2792
14 hikashopProductClass->save() JROOT/components/com_gixmassaction/views/products/view.html.php:265
15 GixmassactionViewProducts->display() JROOT/libraries/src/MVC/Controller/BaseController.php:664
16 Joomla\CMS\MVC\Controller\BaseController->display() JROOT/libraries/src/MVC/Controller/BaseController.php:702
17 Joomla\CMS\MVC\Controller\BaseController->execute() JROOT/components/com_gixmassaction/gixmassaction.php:15
18 require_once() JROOT/libraries/src/Component/ComponentHelper.php:402
19 Joomla\CMS\Component\ComponentHelper::executeComponent() JROOT/libraries/src/Component/ComponentHelper.php:377
20 Joomla\CMS\Component\ComponentHelper::renderComponent() JROOT/libraries/src/Application/SiteApplication.php:194
21 Joomla\CMS\Application\SiteApplication->dispatch() JROOT/libraries/src/Application/SiteApplication.php:233
22 Joomla\CMS\Application\SiteApplication->doExecute() JROOT/libraries/src/Application/CMSApplication.php:225
23 Joomla\CMS\Application\CMSApplication->execute() JROOT/index.php:49

Last edit: 2 years 1 month ago by Minie.

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
2 years 1 month ago #345139

Bonjour,

C'est le plugin product_layout qui fait une requête MySQL de manière incorrect.
Ce plugin n'est pas un plugin que nous avons développer.
Il faudrait contacter le développeur du plugin.
Pour facilement corriger le problème en attendant, vous pouvez désactiver le plugin.

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

  • Posts: 453
  • Thank you received: 31
  • Hikamarket Multivendor Hikashop Business
2 years 1 month ago #345142

J'essaye d'avancer, l'erreur ne se produit pas si je suspend le déclenchement du triggerEvent onAfterProductCreate ligne 2792 de la class product

Je vais donc chercher parmi les multiples plugins que j'ai créé pour ce site interminable, ca vient surement de là, ne vous embêtez pas plus, désolée pour le dérangement.

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

Time to create page: 0.063 seconds
Powered by Kunena Forum