
creacom
Members-
Posts
30 -
Joined
-
Last visited
creacom's Achievements
Newbie (1/14)
0
Reputation
-
As stated in the title, i would like to know what is the best (? cleanest) way, to set a module and have it loaded only on certain pages, for instance, on homepage ONLY. My problem, is i use several modules with js (sometimes big), but not on the same pages, so i would like to speed the page loading. I'm aware that 1) i can add in the template a condition like : {if $page_name == 'index'} ... {/if} but in that case, only the code in between is conditionnal : the js and css are loaded anyway within the public function hookHeader($params) { Tools::addCSS(_MODULE_DIR_.'mymodule.css', 'all'); Tools::addJS(_MODULE_DIR_.'mymodule.js', 'all'); } And it could be very heavy and generating errors since the html the js is working on is not here. 2) I could EXCLUDE pages from the position management but is it really the best way ? I should exclude ALL pages but one ! And i'm not sure either the js won't be loaded. => I understand the separation of the code itself and the position it's html is displayed, but is there's a way to add in the hookHeader function for instance, a condition saying "add js and css only if this page" ? Thank you in advance
-
I agree, i have the same issue. But can you tell how to workaround ? It seems that setting the css and/or js inline with the template content isn't a right way And setting all pages but one as exception in the module managemenent isn't either. So, isn't there a way to do it in the module code ? ... public function hookHeader($params) { //only on specific page, like home or other ? Tools::addJS(_MODULE_DIR_.'myspecific.js', 'all'); }
-
@canel : peux-tu donner le nom de l'hébergement dont tu parles ? @oron : il ne s'agit pas de "casser" systématiquement les mutu ! Avoir un site avec une seule boutique et <500 produits (et encore, je suis en phase de test, donc pas de visiteurs autre que moi!) et avoir des temps d'attente de plusieurs longues secondes entre chaque clic (ex: cliquer sur les cgv, sans image !), ça me paraît suspicieux. Maintenant, je pense qu'il y a mutu et mutu, par exemple y'a t'il des offres avec débit minimum garanti ? car par ex pour OVH, que ce soit offre perso ou premium, il ne semble pas y avoir de changement pour le débit, la bande passante... D'où ma question. Maintenant, je préfèrerais un mutu car je n'ai pas envie de gérer en plus l'administration quotidienne d'un serveur...
-
Bonjour, je ne sais pas si c'est dans ce forum qu'il faut que je poste cette question, mais j'aimerais savoir, si possible d'abord par des gens de la Team Prestashop, mais toute personne ayant déjà ouvert son site (PS 1.5) : quel hébergement minimum conseillez-vous ? Sachant que c'est assez vague, mais que tant qu'à faire autant être utile à tout le monde, j'ai un OVH mutu basique , pour environ 200 produits pour l'instant. Cela me paraît un peu lent quand même (n'étant pas encore ne prod , je n'ai pas encore optimisé la compilation des scripts... En gros pour un site < 500 produits pour un site > 500 produits ... quel type d'hébergement, avec des exemple de pack si possible. En gros ma question est : Est-on obligé d'avoir un serveur dédié de la mort pour un petit site? Avez-vous des exemples de mutu sur lesquels votre expérience CLIENT d'un PS 1.5 est correcte (pas d'attente trop longue d'accès aux pages ...) Merci d'avance
-
Oui, évidemment, je n'installe pas les données de test. (Je ne vois pas pourquoi tu parles de modules). Par contre, en faisant des tests, j'effectue des commandes, donc je crée des clients, pour lesquels je génère des factures, etc... C'est de ce genre de test dont je parle. A part le John Doe, il peut y avoir un tas de données générées par les tests. En gros je veux être sûr d'avoir vidé les tables reliées aux clients (customer) aux commandes (order), aux paniers (carts) et autres tables qui sont reliées à un client/une commande ou un panier. Voilà, peut-être n'avais-je pas été suffisament claire dans mon premier message. La question est, est-ce que ces truncate sont corrects, est-ce qu'il en manque... ? Pour info, je viens de me rendre compte d'une c***rie : TRUNCATE address WHERE id_customer>0; c'est pas possible , donc TRUNCATE address;
-
Produit sans stock affiché
creacom replied to creacom's topic in Utilisation de PrestaShop : configuration et difficultés
Oui, j'étais déjà arrivé à cette solution, mais je trouve que c'est frustrant pour un client de voir un produit (dans une liste, un carousel...), être intéressé par celui ci et au moment où on arrive sur la page de commande, "Désolé en rupture de stock". C'est hyper frustrant. De plus, dans mon cas, les produits sont des pièces "uniques", donc le message ne sert à rien, dans 6 mois, 2 ans, il ne sera toujours pas remis en stock. Par contre j'ai "vite fait" fait un override de la classe Category, ce qui me permet de n'afficher dans les listes via les catégories que les produits présents : a priori ça fonctionne dans les conditions de base, mais je n'ai pas affiné pour tester dans le cas d'un multiboutique ou autre. à remplacer dans /override/classes/Categories.php @PS core développeurs : il serait quand même bon d'avoir dans le core un levier pour gérer l'affichage ou non de produit selon le stock... <?php class Category extends CategoryCore { public $id; /** @var integer category ID */ public $id_category; /** @var string Name */ public $name; /** @var boolean Status for display */ public $active = 1; /** @var integer category position */ public $position; /** @var string Description */ public $description; /** @var integer Parent category ID */ public $id_parent; /** @var integer default Category id */ public $id_category_default; /** @var integer Parents number */ public $level_depth; /** @var integer Nested tree model "left" value */ public $nleft; /** @var integer Nested tree model "right" value */ public $nright; /** @var string string used in rewrited URL */ public $link_rewrite; /** @var string Meta title */ public $meta_title; /** @var string Meta keywords */ public $meta_keywords; /** @var string Meta description */ public $meta_description; /** @var string Object creation date */ public $date_add; /** @var string Object last modification date */ public $date_upd; /** @var boolean is Category Root */ public $is_root_category; /** @var integer */ public $id_shop_default; public $groupBox; protected static $_links = array(); /** * @see ObjectModel::$definition */ public static $definition = array( 'table' => 'category', 'primary' => 'id_category', 'multilang' => true, 'multilang_shop' => true, 'fields' => array( 'nleft' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'nright' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'level_depth' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'required' => true), 'id_parent' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'id_shop_default' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), 'is_root_category' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'position' => array('type' => self::TYPE_INT), 'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'), 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'), // Lang fields 'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 64), 'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 64), 'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'), 'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128), 'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), ), ); /** @var string id_image is the category ID when an image exists and 'default' otherwise */ public $id_image = 'default'; protected $webserviceParameters = array( 'objectsNodeName' => 'categories', 'hidden_fields' => array('nleft', 'nright', 'groupBox'), 'fields' => array( 'id_parent' => array('xlink_resource'=> 'categories'), 'level_depth' => array('setter' => false), 'nb_products_recursive' => array('getter' => 'getWsNbProductsRecursive', 'setter' => false), ), 'associations' => array( 'categories' => array('getter' => 'getChildrenWs', 'resource' => 'category', ), 'products' => array('getter' => 'getProductsWs', 'resource' => 'product', ), ), ); public function __construct($id_category = null, $id_lang = null, $id_shop = null) { parent::__construct($id_category, $id_lang, $id_shop); $this->id_image = ($this->id && file_exists(_PS_CAT_IMG_DIR_.(int)$this->id.'.jpg')) ? (int)$this->id : false; $this->image_dir = _PS_CAT_IMG_DIR_; } /** * Return current category products * * @param integer $id_lang Language ID * @param integer $p Page number * @param integer $n Number of products per page * @param boolean $get_total return the number of results instead of the results themself * @param boolean $active return only active products * @param boolean $random active a random filter for returned products * @param int $random_number_products number of products to return if random is activated * @param boolean $check_access set to false to return all products (even if customer hasn't access) * @return mixed Products or number of products */ public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null) { if (!$context) $context = Context::getContext(); if ($check_access && !$this->checkAccess($context->customer->id)) return false; $front = true; if (!in_array($context->controller->controller_type, array('front', 'modulefront'))) $front = false; if ($p < 1) $p = 1; if (empty($order_by)) $order_by = 'position'; else /// Fix for all modules which are now using lowercase values for 'orderBy' parameter $order_by = strtolower($order_by); if (empty($order_way)) $order_way = 'ASC'; if ($order_by == 'id_product' || $order_by == 'date_add' || $order_by == 'date_upd') $order_by_prefix = 'p'; elseif ($order_by == 'name') $order_by_prefix = 'pl'; elseif ($order_by == 'manufacturer') { $order_by_prefix = 'm'; $order_by = 'name'; } elseif ($order_by == 'position') $order_by_prefix = 'cp'; if ($order_by == 'price') $order_by = 'orderprice'; if (!Validate::isBool($active) || !Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way)) die (Tools::displayError()); $id_supplier = (int)Tools::getValue('id_supplier'); // Return only the number of products if ($get_total) { $sql = 'SELECT COUNT(cp.`id_product`) AS total FROM `'._DB_PREFIX_.'product` p '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'stock_available` sa ON sa.`id_product` = p.`id_product` LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON p.`id_product` = cp.`id_product` WHERE cp.`id_category` = '.(int)$this->id. ($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : ''). ($front ? ' AND sa.`quantity` >0' : ''). ($active ? ' AND product_shop.`active` = 1' : ''). ($id_supplier ? 'AND p.id_supplier = '.(int)$id_supplier : ''); return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql); } $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, image_shop.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(product_shop.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new, (product_shop.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice FROM `'._DB_PREFIX_.'category_product` cp LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = cp.`id_product` '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'stock_available` sa ON sa.`id_product` = p.`id_product` LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product`) '.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.`default_on` = 1').' '.Product::sqlStock('p', 'product_attribute_shop', false, $context->shop).' LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (product_shop.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').') LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').') LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'. Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').' LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang.') LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (product_shop.`id_tax_rules_group` = tr.`id_tax_rules_group` AND tr.`id_country` = '.(int)$context->country->id.' AND tr.`id_state` = 0 AND tr.`zipcode_from` = 0) LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`) LEFT JOIN `'._DB_PREFIX_.'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = '.(int)$id_lang.') LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` WHERE product_shop.`id_shop` = '.(int)$context->shop->id.' AND (pa.id_product_attribute IS NULL OR product_attribute_shop.id_shop='.(int)$context->shop->id.') AND (i.id_image IS NULL OR image_shop.id_shop='.(int)$context->shop->id.') AND cp.`id_category` = '.(int)$this->id .($active ? ' AND product_shop.`active` = 1' : '') .($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '') .($front ? ' AND sa.`quantity` >0' : '') .($id_supplier ? ' AND p.id_supplier = '.(int)$id_supplier : ''); if ($random === true) { $sql .= ' ORDER BY RAND()'; $sql .= ' LIMIT 0, '.(int)$random_number_products; } else $sql .= ' ORDER BY '.(isset($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way).' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); if ($order_by == 'orderprice') Tools::orderbyPrice($result, $order_way); if (!$result) return false; // Modify SQL result return Product::getProductsProperties($id_lang, $result); } } -
Si tu n'as pas accès à tes logs d'erreur php, ça va être dur. Tout ce qu'on peut dire avec tes infos c'est que si tu as une 404 sans le htaccess, c'est que ta page n'existe pas. (http://www.music2000.be/ fonctionne correctement, mais il me semble que c'est une 1.4), Erreur 500 avec htaccess et erreur 404 sans, c'est effectivement un problème d'instruction non valide dans le htaccess. L'as tu modifié à la main ? As tu activé la réécriture des urls ? si oui, désactive pour voir, vide le cache éventuellement et regarde si ça passe.
-
Bonjour, je suis en train de tester ma boutique avant ouverture pour faire le tour des problèmes et je constate que mes produits avec stock vide apparaissent quand même dans la liste des produits, mais que le bouton ajouter au panier est inactif. ne peut-on pas empécher l'affichage de ces produits sans stock dans les préférences du back office ? Je n'ai pas trouvé dans Préférences > Produit > Stock produit Autoriser la commande de produits hors stock : non Activer la gestion des stocks : oui Activer la gestion des stocks avancée : non Merci d'avance
-
Bonjour, j'ai vu des posts pour le sujet mais aucun ne semble avoir de réponse définitive. Y'a t'il un outil "validé par prestashop" pour vider la base de toutes les données avant ouverture du site (clients, commandes, paniers...) J'ai fait une tour du coté des tables et j'ai recensé celles ci : TRUNCATE orders;TRUNCATE order_carrier;TRUNCATE order_detail;TRUNCATE order_detail_tax;TRUNCATE order_history;TRUNCATE order_invoice_payment;TRUNCATE order_invoice_tax;TRUNCATE order_message;TRUNCATE order_message_lang;TRUNCATE order_payment;TRUNCATE order_return;TRUNCATE order_return_detail;TRUNCATE order_slip;TRUNCATE order_slip_detail;TRUNCATE customer;TRUNCATE customer_group;TRUNCATE customer_thread;TRUNCATE cart;TRUNCATE cart_cart_rule;TRUNCATE cart_product;TRUNCATE cart_rule;TRUNCATE cart_rule_carrier;TRUNCATE cart_rule_combination;TRUNCATE cart_rule_country;TRUNCATE cart_rule_group;TRUNCATE cart_rule_lang;TRUNCATE cart_rule_product_rule;TRUNCATE cart_rule_product_rule_group;TRUNCATE cart_rule_product_rule_value;TRUNCATE cart_rule_shop;TRUNCATE address WHERE id_customer>0;TRUNCATE message;TRUNCATE compare;TRUNCATE connections;TRUNCATE connections_page;TRUNCATE connections_source;TRUNCATE favorite_product;TRUNCATE guest;TRUNCATE opinion; Est-ce correct ? En voyez vous d'autres ? Merci
-
Bonjour, j'ai installé un prestashop 1.5.2 clean et j'ai fait une commande fictive avec paiement par chèque, ainsi qu'une autre commande avec paient par mandat (les paiement par défaut). Dans l'administration, les 2 commandes apparaissent bien, j'ai validé les commandes, mis livré. Donc, j'ai bien les facture et les bons de livraisons en pdf. Sauf que je veux vérifier les stats (celles de base de Presta) : lien Commande et CA, j'ai 0 commandes passées, et 0 produits commandés. Et en fait toutes mes stats restent à 0, quel que soit le lien et quel que soit le moteur graphique de visualisation. Ma question est donc : Est-ce un bug ? Faut-il paramétrer quelque chose de particulier pour générer les stats ? Merci d'avance
-
I've done a prestashop shop for a friend about a year ago, where i deveolopped some custom modules, in a prestashop 1.4.4.1 version. It worked well. Now i want to make it work in 1.5.2 but i'm confronting many problems : For one, I have imported products, with quantity = 1, and in the admin pannel, they are displayed with a quantity = 1, but when i look in the database in the ps_product table, the 'quantity' field for all products is = 0 ! So my modules (that worked in P1.4) using that field are broken in P1.5.2 Is ps_product.quantity obsolete ? is it used for anything else ? But most important for me in which table/field should i get the quantity for a product ? I've looked in all ps_product_xxx tables and not found it Thanks in advance
-
Fichiers override dans un thème
creacom replied to Phil2Fer's topic in PrestaShop pour les développeurs
Effectivement, ma phrase, qui t'a heurté Brocéliande, faisait référence au genres de cas qu'émet shagshag : Car sinon, en "testant" un nouveau thème qui à son propre FrontController, il écraserait la surcharge précédente... Ce n'était pas une attaque, juste une remarque. Donc je suppose que comme dit Michaël, pour ce genre de thème avec override, le plus sur serait de faire une install du thème et des modules un par un à la main, parce que faire une partie à la main et une partie automatisé doit augmenter les risques non pas d'oubli, mais de perturbation non prévues et plus difficilement traçable (est-ce un problème lors de l'utilisation de d'installeur, d'un module ou du thème) En tout cas, merci à tous d'avoir pris le temps de répondre à la question -
Fichiers override dans un thème
creacom replied to Phil2Fer's topic in PrestaShop pour les développeurs
Je confirme, ma question était bien la même que celle du premeier message (c'est pourquoi je n'ai pas ouvert un nouveau fil) par contre je ne comprends pas cette dernière réponse : Peut-on via un module (dédié ou non) non seulement copier des fichiers dans le répertoire override, mais aussi modifier des lignes dans certains de ces fichiers!!! ? ex: dans mon thème, j'ai 2 développé 2 modules (miniscroll et homepagecenter) qui ont leurs hooks perso (déclaré dans la base à l'install, pas de souci), mais qui ont besoin d'être référencé dans l'override FrontController.php ... self::$smarty->assign(array( 'HOOK_FOOTERLIST' => Module::hookExec('footerlist'), 'HOOK_MINISCROLL' => Module::hookExec('miniscroll'), //<=hook de mon module 1 'HOOK_HOMEPAGECENTER' => Module::hookExec('homepagecenter'),//<=hook de mon module 2 ... Ca me parait dificilement concevable ne serait-ce qu'en terme de sécurité de modifier un fichier php via un autre fichier php ! Ou alors je n'ai pas compris la réponse. -
Fichiers override dans un thème
creacom replied to Phil2Fer's topic in PrestaShop pour les développeurs
Bonjour, je reprends ce sujet d'il y a quelque mois, car j'ai également la même question. L'installation d'un thème avec override est elle toujours problématique ? (dans mon cas des modules utilisent des hooks personnalisés que je déclare dans l'override FrontController.php, j'ai également overridé le fichier Search, Cart, Category) Y'a t'il une procédure particulière ?