Jump to content

All Activity

This stream auto-updates     

  1. Past hour
  2. class TagCore extends ObjectModel { /** @var int Language id */ public $id_lang; /** @var string Name */ public $name; /** * @see ObjectModel::$definition */ public static $definition = array( 'table' => 'tag', 'primary' => 'id_tag', 'fields' => array( 'id_lang' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), 'name' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32), ), ); protected $webserviceParameters = array( 'fields' => array( 'id_lang' => array('xlink_resource' => 'languages'), ), ); public function __construct($id = null, $name = null, $idLang = null) { $this->def = Tag::getDefinition($this); $this->setDefinitionRetrocompatibility(); if ($id) { parent::__construct($id); } elseif ($name && Validate::isGenericName($name) && $idLang && Validate::isUnsignedId($idLang)) { $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT * FROM `' . _DB_PREFIX_ . 'tag` t WHERE `name` = \'' . pSQL($name) . '\' AND `id_lang` = ' . (int) $idLang); if ($row) { $this->id = (int) $row['id_tag']; $this->id_lang = (int) $row['id_lang']; $this->name = $row['name']; } } } public function add($autoDate = true, $nullValues = false) { if (!parent::add($autoDate, $nullValues)) { return false; } elseif (isset($_POST['products'])) { return $this->setProducts(Tools::getValue('products')); } return true; } /** * Add several tags in database and link it to a product. * * @param int $idLang Language id * @param int $idProduct Product id to link tags with * @param string|array $tagList List of tags, as array or as a string with comas * * @return bool Operation success */ public static function addTags($idLang, $idProduct, $tagList, $separator = ',') { if (!Validate::isUnsignedId($idLang)) { return false; } if (!is_array($tagList)) { $tagList = array_filter(array_unique(array_map('trim', preg_split('#\\' . $separator . '#', $tagList, null, PREG_SPLIT_NO_EMPTY)))); } $list = array(); if (is_array($tagList)) { foreach ($tagList as $tag) { if (!Validate::isGenericName($tag)) { return false; } $tag = trim(Tools::substr($tag, 0, self::$definition['fields']['name']['size'])); $tagObj = new Tag(null, $tag, (int) $idLang); /* Tag does not exist in database */ if (!Validate::isLoadedObject($tagObj)) { $tagObj->name = $tag; $tagObj->id_lang = (int) $idLang; $tagObj->add(); } if (!in_array($tagObj->id, $list)) { $list[] = $tagObj->id; } } } $data = array(); foreach ($list as $tag) { $data[] = array( 'id_tag' => (int) $tag, 'id_product' => (int) $idProduct, 'id_lang' => (int) $idLang, ); } $result = Db::getInstance()->insert('product_tag', $data); if ($list != array()) { self::updateTagCount($list); } return $result; } /** * Update tag count. * * @param array|null $tagList */ public static function updateTagCount($tagList = null) { if (!Module::getBatchMode()) { if ($tagList != null) { $tagListQuery = ' AND pt.id_tag IN (' . implode(',', array_map('intval', $tagList)) . ')'; Db::getInstance()->execute('DELETE pt FROM `' . _DB_PREFIX_ . 'tag_count` pt WHERE 1=1 ' . $tagListQuery); } else { $tagListQuery = ''; } Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'tag_count` (id_group, id_tag, id_lang, id_shop, counter) SELECT cg.id_group, pt.id_tag, pt.id_lang, id_shop, COUNT(pt.id_tag) AS times FROM `' . _DB_PREFIX_ . 'product_tag` pt INNER JOIN `' . _DB_PREFIX_ . 'product_shop` product_shop USING (id_product) JOIN (SELECT DISTINCT id_group FROM `' . _DB_PREFIX_ . 'category_group`) cg WHERE product_shop.`active` = 1 AND EXISTS(SELECT 1 FROM `' . _DB_PREFIX_ . 'category_product` cp LEFT JOIN `' . _DB_PREFIX_ . 'category_group` cgo ON (cp.`id_category` = cgo.`id_category`) WHERE cgo.`id_group` = cg.id_group AND product_shop.`id_product` = cp.`id_product`) ' . $tagListQuery . ' GROUP BY pt.id_tag, pt.id_lang, cg.id_group, id_shop ORDER BY NULL'); Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'tag_count` (id_group, id_tag, id_lang, id_shop, counter) SELECT 0, pt.id_tag, pt.id_lang, id_shop, COUNT(pt.id_tag) AS times FROM `' . _DB_PREFIX_ . 'product_tag` pt INNER JOIN `' . _DB_PREFIX_ . 'product_shop` product_shop USING (id_product) WHERE product_shop.`active` = 1 ' . $tagListQuery . ' GROUP BY pt.id_tag, pt.id_lang, id_shop ORDER BY NULL'); } } /** * Get main tags. * * @param int $idLang Language ID * @param int $nb number * * @return array|false|mysqli_result|null|PDOStatement|resource */ public static function getMainTags($idLang, $nb = 10) { $context = Context::getContext(); if (Group::isFeatureActive()) { $groups = FrontController::getCurrentCustomerGroups(); return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT t.name, counter AS times FROM `' . _DB_PREFIX_ . 'tag_count` pt LEFT JOIN `' . _DB_PREFIX_ . 'tag` t ON (t.id_tag = pt.id_tag) WHERE pt.`id_group` ' . (count($groups) ? 'IN (' . implode(',', $groups) . ')' : '= 1') . ' AND pt.`id_lang` = ' . (int) $idLang . ' AND pt.`id_shop` = ' . (int) $context->shop->id . ' ORDER BY times DESC LIMIT ' . (int) $nb); } else { return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT t.name, counter AS times FROM `' . _DB_PREFIX_ . 'tag_count` pt LEFT JOIN `' . _DB_PREFIX_ . 'tag` t ON (t.id_tag = pt.id_tag) WHERE pt.id_group = 0 AND pt.`id_lang` = ' . (int) $idLang . ' AND pt.`id_shop` = ' . (int) $context->shop->id . ' ORDER BY times DESC LIMIT ' . (int) $nb); } } /** * Get Product Tags. * * @param int $idProduct Product ID * * @return array|bool */ public static function getProductTags($idProduct) { if (!$tmp = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT t.`id_lang`, t.`name` FROM ' . _DB_PREFIX_ . 'tag t LEFT JOIN ' . _DB_PREFIX_ . 'product_tag pt ON (pt.id_tag = t.id_tag) WHERE pt.`id_product`=' . (int) $idProduct)) { return false; } $result = array(); foreach ($tmp as $tag) { $result[$tag['id_lang']][] = $tag['name']; } return $result; } /** * Get Products. * * @param bool $associated * @param Context|null $context * * @return array|false|mysqli_result|null|PDOStatement|resource */ public function getProducts($associated = true, \Context $context = null) { if (!$context) { $context = Context::getContext(); } $idLang = $this->id_lang ? $this->id_lang : $context->language->id; if (!$this->id && $associated) { return array(); } $in = $associated ? 'IN' : 'NOT IN'; return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT pl.name, pl.id_product FROM `' . _DB_PREFIX_ . 'product` p LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON p.id_product = pl.id_product' . Shop::addSqlRestrictionOnLang('pl') . ' ' . Shop::addSqlAssociation('product', 'p') . ' WHERE pl.id_lang = ' . (int) $idLang . ' AND product_shop.active = 1 ' . ($this->id ? ('AND p.id_product ' . $in . ' (SELECT pt.id_product FROM `' . _DB_PREFIX_ . 'product_tag` pt WHERE pt.id_tag = ' . (int) $this->id . ')') : '') . ' ORDER BY pl.name'); } /** * Set products. * * @param array $array * * @return bool */ public function setProducts($array) { $result = Db::getInstance()->delete('product_tag', 'id_tag = ' . (int) $this->id); if (is_array($array)) { $array = array_map('intval', $array); $result &= ObjectModel::updateMultishopTable('Product', array('indexed' => 0), 'a.id_product IN (' . implode(',', $array) . ')'); $ids = array(); foreach ($array as $idProduct) { $ids[] = '(' . (int) $idProduct . ',' . (int) $this->id . ',' . (int) $this->id_lang . ')'; } if ($result) { $result &= Db::getInstance()->execute('INSERT INTO ' . _DB_PREFIX_ . 'product_tag (id_product, id_tag, id_lang) VALUES ' . implode(',', $ids)); if (Configuration::get('PS_SEARCH_INDEXATION')) { $result &= Search::indexation(false); } } } self::updateTagCount(array((int) $this->id)); return $result; } /** * Delete tags for product. * * @param int $idProduct Product ID * * @return bool */ public static function deleteTagsForProduct($idProduct) { $tagsRemoved = Db::getInstance()->executeS('SELECT id_tag FROM ' . _DB_PREFIX_ . 'product_tag WHERE id_product=' . (int) $idProduct); $result = Db::getInstance()->delete('product_tag', 'id_product = ' . (int) $idProduct); Db::getInstance()->delete('tag', 'NOT EXISTS (SELECT 1 FROM ' . _DB_PREFIX_ . 'product_tag WHERE ' . _DB_PREFIX_ . 'product_tag.id_tag = ' . _DB_PREFIX_ . 'tag.id_tag)'); $tagList = array(); foreach ($tagsRemoved as $tagRemoved) { $tagList[] = $tagRemoved['id_tag']; } if ($tagList != array()) { self::updateTagCount($tagList); } return $result; } }
  3. I checked tag.php file and there is no "=" in the mentioned line
  4. hi.. please implement above solution and see the result if you not developer then send me your sever ftp details with PM Thanks
  5. rictools

    MwSt im 1.7.5.2.

    Jetzt weiß ich immer noch nicht, ob die MwSt. denn ansonsten berücksichtigt wird und nur in der Rechnung nicht. Der Scan der Eingabefelder ist auch nicht hilfreich mit einem Betrag "0.00".
  6. I am afraid..this is not the issue...503 server error seems to be the issue..something related to cart
  7. Sylvia W Randall

    Voucher code on discounted products error

    I think that the bug you have mentioned in Prestashop is resolved now.
  8. Cosmopolita

    MwSt im 1.7.5.2.

    Uppp, wollte die Rechnung nicht 4 x schicken. Betr.: Preise Habe keine Einstelngen vorgenommen und die Preise in das Feld 'Tax Inckluded' eingegeben
  9. I just want to display product attributes on products attributes on products listing page, someone please suggest how can i do this?? Thanks in advance
  10. Cosmopolita

    MwSt im 1.7.5.2.

    Lieber Christian Vielen Dank für Deine Bemühungen. Einstellungen habe ich gar keine vorgenommen und habe nur die Preise einschl. MwSt eingegeben. Die Rechnung siehrt ao aus: Die Rechung sieht so aus:
  11. Hi.. Above is not your error Your error is this file override/classes/Tag.php here is your solutions
  12. Today
  13. Photonica

    Prestashop 1.7.6 problema AJAX carrito

    Hola ¿Alguien tiene alguna idea de cómo solucionarlo? O incluso si conoce algún módulo que realice esta función ¡Gracias!
  14. Thanks you for the modules. About : "Update 16/05: we are considering adding a cronjob to this module (fires automatically every x time and disable and enable categories). For this we want feedback from the users to know if this update is needed." I think that it would be a good improvement for people that sincronize DB automatically with diferent data sources or CRMs. For us it will be perfect.
  15. Prestashop Addict

    Saisie de 2 mots dans le bloc Recherche

    @Manu1238 comme indiqué il faut modifier la méthode find() dans la classe Search. Le source est dans /classes/Search.php. Je vous recommande de faire un override pour ne pas modifier directement le code de Prestashop.
  16. Ta capture c'est là que le client mets ces informations de CB. Le module fonctionne correctement.
  17. architects gurgaon

    IT Consultant Company

    Dear Gill, I would like to get some digital marketing tutorials. So, please suggest me some good books to generate some good leads for my popular project property in Nainital. Looking ahead for your favorable reply. Regards, Shape My House
  18. J'ai essayé ça et ça : http://community.ovh.com/t/cdn-vider-cache-ko/464 http://doc.prestashop.com/pages/viewpage.action?pageId=20840893 et ça mais je n'ai pas CDN :
  19. Hi.. Please enable the debug mode from prestashop admin and and see error log Thanks
  20. Il est normal de ne pas trouver de module lorsque le besoin est très spécifique. ça reste un développement assez trivial néanmoins. Quelle version de Prestashop exactement?
  21. Hi, I am trying to solve this issue of not being able to add products to the cart. The browser error console reports 503 server error. This started 3 days back and not able to find what has went wrong. www.falconfresh.com is the website. Any help will be much appreciated. Thanks
  22. He puesto la tabla "currency" como se muestra en la imagen del post de github:
  23. Il semble que ce soit un problème de cache sous PS. Je l'ai vidé et ça semble fonctionner normalement.
  24. Je suis novice, un peu trop compliqué pour moi. Je cherche un module existant mais je trouve uniquement des modules avec des timers (pour annuler une commande non payé par exemple) mais pas qui interagit avec certain produit.
  25. Haumea

    Errore caricamento file csv prodotti

    L'errore è chiaro, il formato della data nel file csv non è congruo con quello che PS richiede.
  1. Load more activity
×

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More