Jump to content

insitweb

Members
  • Posts

    58
  • Joined

  • Last visited

About insitweb

  • Birthday 03/17/1971

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

insitweb's Achievements

Rookie

Rookie (2/14)

  • Reacting Well Rare
  • First Post Rare
  • Collaborator Rare
  • Conversation Starter Rare
  • Week One Done Rare

Recent Badges

2

Reputation

  1. Bonjour, Je suis sous Prestashop 1.7.8.10 est le problème existe toujours. Le prix unitaire des déclinaisons ne se met pas à jour si on applique un prix spécifique. Est-ce que quelqu'un aurait trouvé une solution ? Très bonne journée ;-)
  2. Bonjour, J'ai trouvé une solution. Je la partage donc, si cela peut aider quelqu'un. Pour un peu plus de précision, ce développement complémentaire concerne la fonction "render()" dans "modules/creativeelements/modules/catalog/widgets/product-variants.php" du constructeur de page "Creative elements". protected function render() { $settings = $this->getSettingsForDisplay(); $context = \Context::getContext(); $groups = &$context->smarty->tpl_vars['groups']->value; // Récupérer les stocks réels des déclinaisons depuis le tableau $combinations $combinations = &$context->smarty->tpl_vars['combinations']->value; $stockData = []; // Boucle pour afficher chaque combinaison avec la classe CSS appropriée foreach ($combinations as $combination) { $attributesList = $combination['list']; $attributesListArray = explode(',', $attributesList); $combinedAttributes = implode('-', $attributesListArray); $stockData[$combinedAttributes] = $combination['quantity']; // Enlever les guillemets simples des clés du tableau $stockData $stockData = array_combine(array_map(function($key) { return str_replace("'", "", $key); }, array_keys($stockData)), $stockData); } ?> <div class="ce-product-variants"> <?php foreach ($groups as $id_attr_group => $group) { ?> <?php if (!empty($group['attributes'])) { ?> <div class="ce-product-variants__item"> <span class="ce-product-variants__label"><?php echo esc_html($group['name']); ?></span> <?php if ('stacked' === $settings['layout'] && $settings['show_value']) { ?> <span class="ce-product-variants__value"> <?php foreach ($group['attributes'] as $value) { ?> <?php echo $value['selected'] ? $value['name'] : ''; ?> <?php } ?> </span> <?php } ?> <?php if ('select' === $group['group_type']) { ?> <div class="ce-product-variants__select"> <select class="elementor-field elementor-field-textual elementor-size-<?php echo esc_attr($settings['select_size']); ?>" oninput="$(this.form[this.name]).val(this.value)" form="add-to-cart-or-refresh" name="group[<?php echo (int) $id_attr_group; ?>]" data-product-attribute="<?php echo (int) $id_attr_group; ?>"> <?php foreach ($group['attributes'] as $id_attr => $group_attr) { ?> <option <?php echo $group_attr['selected'] ? 'selected' : ''; ?> value="<?php echo (int) $id_attr; ?>"><?php echo esc_html($group_attr['name']); ?></option> <?php } ?> </select> </div> <?php } elseif ('radio' === $group['group_type']) { ?> <div class="ce-product-variants__options"> <?php foreach ($group['attributes'] as $id_attr => $group_attr) { if($selected_color_id != NULL) { $attributesList = $selected_color_id . '-' . $id_attr; $isOutOfStock = isset($stockData[$attributesList]) && $stockData[$attributesList] === 0; } else { $isOutOfStock = isset($stockData[$id_attr]) && $stockData[$id_attr] === 0; } ?> <label class="ce-product-variants__radio-wrapper" aria-label="<?php echo esc_attr($group_attr['name']); ?>"> <input class="ce-product-variants__radio" form="add-to-cart-or-refresh" type="radio" <?php echo $group_attr['selected'] ? 'checked' : ''; ?> name="group[<?php echo (int)$id_attr_group; ?>]" value="<?php echo (int)$id_attr; ?>" data-product-attribute="<?php echo (int)$id_attr_group; ?>"> <span class="ce-product-variants__option <?php echo $isOutOfStock ? 'out-of-stock' : ''; ?>"><?php echo esc_html($group_attr['name']); ?></span> </label> <?php } ?> </div> <?php } elseif ('color' === $group['group_type']) { ?> <div class="ce-product-variants__patterns"> <?php foreach ($group['attributes'] as $id_attr => $group_attr) { ?> <label class="ce-product-variants__radio-wrapper" title="<?php echo esc_attr($group_attr['name']); ?>"> <input class="ce-product-variants__radio" form="add-to-cart-or-refresh" type="radio" <?php echo $group_attr['selected'] ? 'checked' : ''; ?> name="group[<?php echo (int) $id_attr_group; ?>]" value="<?php echo (int) $id_attr; ?>" data-product-attribute="<?php echo (int) $id_attr_group; ?>"> <?php if ($group_attr['html_color_code']) { ?> <span class="ce-product-variants__pattern ce-product-variants__color" style="background-color: <?php echo esc_attr($group_attr['html_color_code']); ?>"></span> <?php } elseif ($group_attr['texture']) { ?> <span class="ce-product-variants__pattern ce-product-variants__texture" style="background-image: url(<?php echo esc_attr($group_attr['texture']); ?>)"></span> <?php } ?> </label> <?php if($group_attr['selected'] == 1) { $selected_color_id = $id_attr; } } ?> </div> <?php } ?> </div> <?php } ?> <?php } ?> </div> <?php } Dans un premier temps, je récupère les valeurs des différentes déclinaisons : Ensuite, j'initialise la variable "$selected_color_id" suivant le choix de l'internaute : J'initialise ensuite la variable "$attributesList" en concaténant la valeur sélectionnée de l'attribut "color" et l'ID des valeurs de l'attribut "radio" : Puis, j'initialise la variable "$isOutOfStock" à true ou false, suivant si le stock de la déclinaison est à 0 ou non, afin d'appliquer une condition dans le span, dans le but de lui affecter une classe css "out -de-stock" : Et enfin, je stylise mon span avec du css : Le but final est de barrer les déclinaisons ayant un stock à 0, pour que l'internaute soit une visibilité immédiate des déclinaisons disponibles.
  3. Bonjour Kaudaj, Je suis dans le "Deuxième cas" mais le problème est que je suis dans un fichier .php. J'ai 2 groupes "taille" et "couleur". Je souhaite juste barrer les déclinaisons taille, lorsque le stock est à 0. Pourrais-tu me donner cette partie, mais en php ? {assign var="attributes" value=Outils::getValue('group')} {if $group_attribute.texture} {$attributs[$id_attribute_group] = $id_attribute} {/si} Je ne connais pas les variables disponibles en php pour remplacer tes variables smarty. Voici ma fonction render() protected function render() { $settings = $this->getSettingsForDisplay(); $context = \Context::getContext(); $groups = &$context->smarty->tpl_vars['groups']->value; $combinations = &$context->smarty->getTemplateVars('combinations'); // Récupérer l'ID du produit if (isset($_GET['id_product']) && is_numeric($_GET['id_product'])) { $id_product = (int)$_GET['id_product']; } else { // Gérer le cas où l'ID du produit n'est pas valide die('ID de produit non valide.'); } ?> <div class="ce-product-variants"> <?php foreach ($groups as $id_attr_group => $group) { ?> <?php if (!empty($group['attributes'])) { ?> <div class="ce-product-variants__item"> <span class="ce-product-variants__label"><?php echo esc_html($group['name']); ?></span> <?php if ('stacked' === $settings['layout'] && $settings['show_value']) { ?> <span class="ce-product-variants__value"> <?php foreach ($group['attributes'] as $value) { ?> <?php echo $value['selected'] ? $value['name'] : ''; ?> <?php } ?> </span> <?php } ?> <?php if ('select' === $group['group_type']) { ?> <div class="ce-product-variants__select"> <select class="elementor-field elementor-field-textual elementor-size-<?php echo esc_attr($settings['select_size']); ?>" oninput="$(this.form[this.name]).val(this.value)" form="add-to-cart-or-refresh" name="group[<?php echo (int) $id_attr_group; ?>]" data-product-attribute="<?php echo (int) $id_attr_group; ?>"> <?php foreach ($group['attributes'] as $id_attr => $group_attr) { ?> <option <?php echo $group_attr['selected'] ? 'selected' : ''; ?> value="<?php echo (int) $id_attr; ?>"><?php echo esc_html($group_attr['name']); ?></option> <?php } ?> </select> </div> <?php } elseif ('radio' === $group['group_type']) { ?> <div class="ce-product-variants__options"> <?php foreach ($group['attributes'] as $id_attr => $group_attr) { ?> <label class="ce-product-variants__radio-wrapper" aria-label="<?php echo esc_attr($group_attr['name']); ?>"> <?php $id_attribute = $id_attr; // Valeur de l'attribut $combinations = $combinations; // Tableau des combinaisons de produits $id_product = $id_product; // Id du produit // Assignation de la valeur de l'attribut dans un tableau (équivalent à {assign var="attributes" value=[$id_attribute]}) //$attributes = array($id_attribute); /**************************************/ // Assignation de la valeur de l'attribut à partir de Tools::getValue('group') dans un tableau (équivalent à {assign var="attributes" value=Tools::getValue('group')}) $attributes = \Tools::getValue('group'); // Vérification si $group_attribute.couleur existe (équivalent à {if $group_attribute.texture}) if (isset($group_attribute['couleur'])) { // Ajout de la valeur $id_attribute dans le tableau $attributes sous la clé $id_attribute_group (équivalent à {$attributes[$id_attribute_group] = $id_attribute}) $attributes[$id_attribute_group] = $id_attribute; } /**************************************/ // Récupération de l'ID de l'attribut du produit à partir de ses attributs (équivalent à {assign var="id_product_attribute" value=Product::getIdProductAttributeByIdAttributes(Tools::getValue('id_product'), $attributes)}) $id_product_attribute = \Product::getIdProductAttributeByIdAttributes($id_product, $attributes); // Vérification si la combinaison est en rupture de stock (équivalent à {assign var="out_of_stock" value=$combinations[$id_product_attribute].quantity <= 0}) $out_of_stock = $combinations[$id_product_attribute]['quantity'] <= 0; ?> <input class="ce-product-variants__radio" form="add-to-cart-or-refresh" type="radio" <?php echo $group_attr['selected'] ? 'checked' : ''; ?> name="group[<?php echo (int) $id_attr_group; ?>]" value="<?php echo (int) $id_attr; ?>" data-product-attribute="<?php echo (int) $id_attr_group; ?>"> <span class="ce-product-variants__option <?php if($out_of_stock){ echo 'out-of-stock';} ?>"><?php echo esc_html($group_attr['name']); ?></span> </label> <?php } ?> </div> <?php } elseif ('color' === $group['group_type']) { ?> <div class="ce-product-variants__patterns"> <?php foreach ($group['attributes'] as $id_attr => $group_attr) { ?> <label class="ce-product-variants__radio-wrapper" title="<?php echo esc_attr($group_attr['name']); ?>"> <input class="ce-product-variants__radio" form="add-to-cart-or-refresh" type="radio" <?php echo $group_attr['selected'] ? 'checked' : ''; ?> name="group[<?php echo (int) $id_attr_group; ?>]" value="<?php echo (int) $id_attr; ?>" data-product-attribute="<?php echo (int) $id_attr_group; ?>"> <?php if ($group_attr['html_color_code']) { ?> <span class="ce-product-variants__pattern ce-product-variants__color" style="background-color: <?php echo esc_attr($group_attr['html_color_code']); ?>"></span> <?php } elseif ($group_attr['texture']) { ?> <span class="ce-product-variants__pattern ce-product-variants__texture" style="background-image: url(<?php echo esc_attr($group_attr['texture']); ?>)"></span> <?php } ?> </label> <?php } ?> </div> <?php } ?> </div> <?php } ?> <?php } ?> </div> <?php } C'est la partie entre /**************************************/ qui me pose problème. Si quelqu'un a des pistes, je suis preneur. Merci d'avance ;-)
  4. Je n'ai jamais utilisé ce thème. Il faut que tu trouves cette ligne dans les templates de ton thème : {$product.availability_date} et que tu le remplaces par : {$product.availability_date|date_format:"%d/%m/%Y"}
  5. Supprimez "<span>{$product.availability_date}</span>", enregistrez depuis votre Ftp, forcez la compilation et videz le cache. Si "2023-06-01" apparait encore, c'est que vous n'êtes pas dans le bon fichier.
  6. Vous auriez dû voir la valeur de "$product.availability_date" s'afficher. Si vous n'avez rien vu, c'est que vous n'êtes pas dans le bon fichier...
  7. Sans accès ftp et admin, c'est difficile de comprendre d'où vient le problème. Pouvez-vous placer ce code au dessus du span, comme ceci : {$product.availability_date|@var_dump} <span>{$product.availability_date|date_format:"%d/%m/%Y"}</span>
  8. Bonjour, Avez-vous forcé la compilation et vidé le cache dans "CONFIGURER => Paramètres avancés => Performances" ? Auriez-vous une Url ?
  9. Hello enmoderugby, You can use the "date_format" function, like this : {block name='product_availability_date'} {if $product.availability_date} <div class="product-availability-date"> <label class="label mb-0">{l s='Availability date:' d='Shop.CreathemeCatalog'}</label> <span>{$product.availability_date|date_format:"%d/%m/%Y"}</span> </div> {/if} {/block} Good evening ;-)
  10. Hello ComGrafPL, Thank you for your advice but unfortunately it does not work in Php 7.4.
  11. Hello, I have an error when I want to upload an icon for a carrier. It is impossible for me to download this icon from the administration. here is error message : jquery.ajaxfileupload.js:6 Uncaught TypeError: jQuery.handleError is not a function at HTMLIFrameElement.i (jquery.ajaxfileupload.js:6:1850) at HTMLIFrameElement.dispatch (jquery-3.5.1.min.js:2:43090) at HTMLIFrameElement.v.handle (jquery-3.5.1.min.js:2:41074) i @ jquery.ajaxfileupload.js:6 dispatch @ jquery-3.5.1.min.js:2 v.handle @ jquery-3.5.1.min.js:2 load (asynchrone) add @ jquery-3.5.1.min.js:2 s.event.add @ jquery-migrate-3.1.0.min.js:2 (anonyme) @ jquery-3.5.1.min.js:2 each @ jquery-3.5.1.min.js:2 each @ jquery-3.5.1.min.js:2 ke @ jquery-3.5.1.min.js:2 on @ jquery-3.5.1.min.js:2 s.fn.<computed> @ jquery-migrate-3.1.0.min.js:2 ajaxFileUpload @ jquery.ajaxfileupload.js:6 uploadCarrierLogo @ index.php?controller=AdminCarrierWizard&id_carrier=33&token=c41e9dc215974b5c0542685ba63aef5a:1099 onchange @ index.php?controller=AdminCarrierWizard&id_carrier=33&token=c41e9dc215974b5c0542685ba63aef5a:1267 The "js/jquery/plugins/ajaxfileupload/jquery.ajaxfileupload.js" file is minified, so it's very difficult to read it. I tried in Php 7.1 + 7.2 + 7.3 but it doesn't change anything. Has anyone encountered this problem before and found a solution? Thank you in advance for the time you devote to me. Prestashop 1.7.8.3 PHP 7.2
  12. Bonjour, J'ai une erreur lorsque je veux uploader une icône pour un transporteur. Il m'est impossible de télécharger cette icône depuis l'administration. Voici le message d'erreur : jquery.ajaxfileupload.js:6 Uncaught TypeError: jQuery.handleError is not a function at HTMLIFrameElement.i (jquery.ajaxfileupload.js:6:1850) at HTMLIFrameElement.dispatch (jquery-3.5.1.min.js:2:43090) at HTMLIFrameElement.v.handle (jquery-3.5.1.min.js:2:41074) i @ jquery.ajaxfileupload.js:6 dispatch @ jquery-3.5.1.min.js:2 v.handle @ jquery-3.5.1.min.js:2 load (asynchrone) add @ jquery-3.5.1.min.js:2 s.event.add @ jquery-migrate-3.1.0.min.js:2 (anonyme) @ jquery-3.5.1.min.js:2 each @ jquery-3.5.1.min.js:2 each @ jquery-3.5.1.min.js:2 ke @ jquery-3.5.1.min.js:2 on @ jquery-3.5.1.min.js:2 s.fn.<computed> @ jquery-migrate-3.1.0.min.js:2 ajaxFileUpload @ jquery.ajaxfileupload.js:6 uploadCarrierLogo @ index.php?controller=AdminCarrierWizard&id_carrier=33&token=c41e9dc215974b5c0542685ba63aef5a:1099 onchange @ index.php?controller=AdminCarrierWizard&id_carrier=33&token=c41e9dc215974b5c0542685ba63aef5a:1267 Le fichier "js/jquery/plugins/ajaxfileupload/jquery.ajaxfileupload.js" est minifié, il est donc très difficile de le lire. J'ai essayé en Php 7.1 + 7.2 + 7.3 mais ça ne change rien. Est-ce que quelqu'un aurait déjà rencontré ce problème et trouvé une solution ? Merci d'avance pour le temps que vous me consacrez. Prestashop 1.7.8.3 PHP 7.2
×
×
  • Create New...