[addon]Smart images sorting (V.1.0.1), dispatche les images catégories/produits en fonction des catégories |
Bienvenue invité ( Connexion | Inscription )
[addon]Smart images sorting (V.1.0.1), dispatche les images catégories/produits en fonction des catégories |
10 Nov 2013, 16:54
Message
#1
|
|
Ceinture marron OSC Groupe : Membres Messages : 1665 Inscrit : 3-June 09 Membre no 25501 |
Marre de voir votre dossier images en bordel ?
Cet addon est fait pour vous. Pour les catégories : Lors d'une création d'une catégorie, créer automatiquement un dossier pour celle ci accueillant l'image de la catégorie. Lors de la suppression de la catégorie, supprime son image et son dossier.(suppression récursive des sous dossiers catégories) Pour les produits : Lors d'une création d'un produit, créer automatiquement un dossier pour celui ci accueillant les images de ce produit dans sa catégorie. Lors de la suppression du produit, supprime son image et son dossier (suppression récursive de toutes les images) Sécurisation Afin d'éviter toute interpolation dans le dossier images, les catégories sont classées dans un nouveau dossier categories (tel illustré ci dessous) chaque dossier est renommé avec le nom de la catégorie et son identifiant (tout caractère non alpha-numérique et espace sont remplacés par un underscore ainsi qu'une nomination en minuscule) categorie_smart_images_sorting par foxp2projects, sur Flickr Afin d'éviter toute interpolation dans les dossiers categories, les produits sont classés dans un nouveau dossier produit (tel illustré ci dessous) chaque dossier est renommé avec l'identifiant du produit. product_smart_images_sorting par foxp2projects, sur Flickr Factorisation du code et réutilisation de code existant Cet addon modifie très peu le code source du noyau d' osCommerce en réutilisant l'existant, à savoir : la fonction tep_generate_category_path pour construire le chemin de chaque dossier (categories ou product) la function tep_remove pour la suppression des dossiers pour : les catégories les produits en factorisant le code avec la nouvelle fonction tep_smart_images_dir en double emploi avec (par exemple) : création/modification d'une catégorie création d'un produit ou modification d'un produit Installation télécharger: lien importer le fichier update.sql avec phpmyadmin si votre version du script osCommerce est vierge de toute modification sur les fichiers suivants : - catalog\admin\categories.php - catalog\admin\includes\functions\general.php copier les fichiers vers leurs répertoires respectifs. si votre dossier admin est renommé, adapter la destination des fichiers vers catalog/{nom_de_mon_dossier_admin} si votre version d'osCommerce est modifié (ou une version inférieure à 2.3.3.4) , utiliser un comparateur de fichier. Avertissment Malgré le soin apporté à la rédaction de ce sujet ainsi qu'au développement de cet addon, il est probable que certains bugs persistent. N'hésitez pas à les commenter/signaler ici ou directement sur github : issue Ce message a été modifié par FoxP2 - 14 Nov 2013, 09:11.
Raison de l'édition : Correction du bug 'suppression du répertoire images'
|
|
10 Nov 2013, 20:33
Message
#2
|
|
Ceinture marron OSC Groupe : Membres Messages : 1665 Inscrit : 3-June 09 Membre no 25501 |
Modification manuelle (basé sur la version originale des fichiers) :
catalog/admin/categories.php ligne 77 -> 94 Citation } } $categories_image = new upload('categories_image'); $categories_image->set_destination(DIR_FS_CATALOG_IMAGES); $categories_image = new upload('categories_image'); // bof smart-images-sorting $dir = tep_smart_images_dir((int)$categories_id); $categories_image->set_destination(DIR_FS_CATALOG_IMAGES . $dir); // eof smart-images-sorting if ($categories_image->parse() && $categories_image->save()) { tep_db_query("update " . TABLE_CATEGORIES . " set categories_image = '" . tep_db_input($categories_image->filename) . "' where categories_id = '" . (int)$categories_id . "'"); // bof smart-images-sorting tep_db_query("update " . TABLE_CATEGORIES . " set categories_image = '" . $dir . tep_db_input($categories_image->filename) . "' where categories_id = '" . (int)$categories_id . "'"); // eof smart-images-sorting } if (USE_CACHE == 'true') { ligne 228 -> 232 Citation 'manufacturers_id' => (int)tep_db_prepare_input($HTTP_POST_VARS['manufacturers_id'])); $products_image = new upload('products_image'); $products_image->set_destination(DIR_FS_CATALOG_IMAGES); if ($products_image->parse() && $products_image->save()) { $sql_data_array['products_image'] = tep_db_prepare_input($products_image->filename); } if ($action == 'insert_product') { $insert_sql_data = array('products_date_added' => 'now()'); ligne 233 -> 271 Citation $products_id = tep_db_insert_id(); tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$products_id . "', '" . (int)$current_category_id . "')"); // bof smart-images-sorting $dir = tep_smart_images_dir((int)$cPath, true, (int)$products_id); $products_image->set_destination(DIR_FS_CATALOG_IMAGES . $dir); if ($products_image->parse() && $products_image->save()) { $sql_data_array['products_image'] = $dir . tep_db_prepare_input($products_image->filename); } tep_db_perform(TABLE_PRODUCTS, $sql_data_array, 'update', "products_id = '" . (int)$products_id . "'"); // eof smart-images-sorting } elseif ($action == 'update_product') { // bof smart-images-sorting $dir = tep_smart_images_dir((int)$cPath, true, (int)$products_id); // eof smart-images-sorting $update_sql_data = array('products_last_modified' => 'now()'); // bof smart-images-sorting $products_image->set_destination(DIR_FS_CATALOG_IMAGES . $dir); if ($products_image->parse() && $products_image->save()) { $sql_data_array['products_image'] = $dir . tep_db_prepare_input($products_image->filename); } // eof smart-images-sorting $sql_data_array = array_merge($sql_data_array, $update_sql_data); tep_db_perform(TABLE_PRODUCTS, $sql_data_array, 'update', "products_id = '" . (int)$products_id . "'"); ligne 302 -> 320 Citation 'sort_order' => $pi_sort_order); $t = new upload($key); $t->set_destination(DIR_FS_CATALOG_IMAGES); // bof smart-images-sorting $dir = tep_smart_images_dir((int)$cPath, true, (int)$products_id); $t->set_destination(DIR_FS_CATALOG_IMAGES . $dir); // eof smart-images-sorting if ($t->parse() && $t->save()) { $sql_data_array['image'] = tep_db_prepare_input($t->filename); // bof smart-images-sorting $sql_data_array['image'] = $dir . tep_db_prepare_input($t->filename); // eof smart-images-sorting } tep_db_perform(TABLE_PRODUCTS_IMAGES, $sql_data_array, 'update', "products_id = '" . (int)$products_id . "' and id = '" . (int)$matches[1] . "'"); $piArray[] = (int)$matches[1]; ligne 323 -> 342 Citation 'htmlcontent' => tep_db_prepare_input($HTTP_POST_VARS['products_image_htmlcontent_new_' . $matches[1]])); $t = new upload($key); $t->set_destination(DIR_FS_CATALOG_IMAGES); // bof smart-images-sorting $dir = tep_smart_images_dir((int)$cPath, true, (int)$products_id); $t->set_destination(DIR_FS_CATALOG_IMAGES . $dir); // eof smart-images-sorting if ($t->parse() && $t->save()) { $pi_sort_order++; $sql_data_array['image'] = tep_db_prepare_input($t->filename); // bof smart-images-sorting $sql_data_array['image'] = $dir . tep_db_prepare_input($t->filename); // eof smart-images-sorting $sql_data_array['sort_order'] = $pi_sort_order; tep_db_perform(TABLE_PRODUCTS_IMAGES, $sql_data_array); fichier catalog/admin/includes/functions/general.php ~ ligne 941 -> 960 Modification de la function tep_remove_category Citation if ($duplicate_image['total'] < 2) { if (file_exists(DIR_FS_CATALOG_IMAGES . $category_image['categories_image'])) { @unlink(DIR_FS_CATALOG_IMAGES . $category_image['categories_image']); // bof smart-images-sorting $dir_tmp = explode('/', trim($category_image['categories_image'])); $img = end($dir_tmp); $dir = substr(DIR_FS_CATALOG_IMAGES . $category_image['categories_image'], 0, - strlen($img)); if( $dir !== DIR_FS_CATALOG_IMAGES) { tep_remove($dir); } // eof smart-images-sorting } } tep_db_query("delete from " . TABLE_CATEGORIES . " where categories_id = '" . (int)$category_id . "'"); tep_db_query("delete from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$category_id . "'"); tep_db_query("delete from " . TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id = '" . (int)$category_id . "'"); ~ ligne 971 -> 983 Modification de la function tep_remove_product Citation if ($duplicate_image['total'] < 2) { if (file_exists(DIR_FS_CATALOG_IMAGES . $product_image['products_image'])) { @unlink(DIR_FS_CATALOG_IMAGES . $product_image['products_image']); // bof smart-images-sorting $dir_tmp = explode('/', trim($product_image['products_image'])); $img = end($dir_tmp); $dir = substr(DIR_FS_CATALOG_IMAGES . $product_image['products_image'], 0, - strlen($img)); if( $dir !== DIR_FS_CATALOG_IMAGES) { tep_remove($dir); } // eof smart-images-sorting } } ligne 989 -> 1001 Citation if ($duplicate_image['total'] < 2) { if (file_exists(DIR_FS_CATALOG_IMAGES . $product_images['image'])) { @unlink(DIR_FS_CATALOG_IMAGES . $product_images['image']); // bof smart-images-sorting $dir_tmp = explode('/', trim($product_images['image'])); $img = end($dir_tmp); $dir = substr(DIR_FS_CATALOG_IMAGES . $product_images['image'], 0, - strlen($img)); tep_remove($dir); // eof smart-images-sorting } } } ~ ligne 1491 -> 1518 ajout de la nouvelle function tep_smart_images_dir : Citation return is_writable($file); } } // bof smart-images-sorting function tep_smart_images_dir($category_id, $product = false, $product_id = null) { $img_category_dir = tep_generate_category_path($category_id, 'category'); $dir = 'categories/'; foreach (array_reverse($img_category_dir[0]) as $cat) { $dir .= preg_replace('/[^a-zA-Z0-9_.-]/i', '_', strtolower($cat['text'] . '_' . $cat['id'])) . '/'; } if ($product) { $dir .= 'product_' . $product_id . '/'; } if (!is_dir(DIR_FS_CATALOG_IMAGES . $dir)) { mkdir(DIR_FS_CATALOG_IMAGES . $dir, 0775, true); } return $dir; } // eof smart-images-sorting ?> les lignes en vert sont à ajouter les lignes en rouge sont à supprimer réalisé avec la ligne de commande : git diff d98a21b 2edf6ce > diff.txt |
|
11 Nov 2013, 11:36
Message
#3
|
|
Ceinture jaune OSC Groupe : Membres Messages : 51 Inscrit : 3-June 13 Membre no 32238 |
Bonjour,
super top, ça fonctionne nickel, merci Monsieur de vos contributions et aides (pour le bidouilleur-non programmeur que je suis !). Y'a plus qu'à réintégrer les images dans l'admin. Encore merci, bonne journée, Thumba. -------------------- Oscommerce 2.3.2 l HeaderTags SEO V 3.3.0 l Ultimate SEO URLS V22 l Dynamic Template System V2 l Ckeditor l googlexml sitemap seo V.1.6 l activate or inactivate category l dhtml state selection 2.3.1 l jsor-jcarousel l previous-next with details l shoppingCart cleanup l SLiCK reCaptcha 1.0.1 l Store Mode 1.3 l superfish horizontal navbar l QtPro 4.6.1 l MATC 1.1
|
|
2 Oct 2014, 13:56
Message
#4
|
|
Ceinture blanche+ OSC Groupe : Membres Messages : 34 Inscrit : 4-February 12 Membre no 30570 |
Petite question...
J'ai install cette addon sur ma 2.3.4 et sa marche au poil si on a pas beaucoup de sous catégorie... dès que l'on a une arborescence un peut longue, sa ne fonctionne plus (et si y'a des accents dans les catégories c'est encore pire) ex... L'IMAGE N'EXISTE PAS categories/pi__ces_d__tach__e___lectrique_83/accumulateur_87/bos la photo est bien uploader mais le nom de la photo est tronquer... le nombre de caractère dans l'adresse est limité... Y'a t'il une solution simple autre que de revoir toute l'organisation des produits ? Accessoirement lors de la suppression d'une catégorie, le dossier n'est pas supprimer du serveur Merci Ce message a été modifié par Budington - 2 Oct 2014, 14:04. |
|
18 Mar 2015, 14:05
Message
#5
|
|
Ceinture jaune OSC Groupe : Membres Messages : 76 Inscrit : 22-January 10 Lieu : Bourges 18 Membre no 26930 |
Bonjour FoxP2,
Super cette contribution! cependant avant de me lancer dans son installation j'aurais une question. Est ce qu'en installant cette contribution sur une boutique déjà en route depuis longtemps avec environ 700 produits les images et les dossiers vont se mettre en place automatiquement? Ou faut il le faire manuellement après installation? D'avance merci pour ta réponse. Aux autre aussi pour ceux qui l'auraient déjà installée momoxygene -------------------- Oscommerce 2.3.4 + Template algozone + Customer_Extra_Fields + Discount_coupon_3.1 + Quick_Updates_2.9.2 + order_edi
tor1.3 + SEO URL 5PRO (R205) + Auto backup + Multiorders V2.1 + oSticket + pdf_customer_invoice_v1.3(problème avec le symbole €) |
|
18 Mar 2015, 15:58
Message
#6
|
|
Ceinture noire OSC Groupe : TechDev Messages : 2757 Inscrit : 9-September 08 Lieu : Douai Membre no 22915 |
Bonjour
Le premier message de ce fil parle de créer des répertoires en arborescence, avec des noms conformes. Il n'y a donc aucune copie d'images anciennes, dont d'ailleurs le nom ne t'est pas demandé. Il faut donc effectivement tout reprendre un par un. Et, si nécessaire, renommer les produits et catégories pour leur donner un nom conforme (sinon, voir le msg de Budington)** Dans ce cas, le téléchargement du répertoire images actuel en local (s'il n'existe pas déjà) simplifiera le travail, qui peut se faire petit à petit, le fonctionnement étant assuré tant que l'ancien répertoire images n'est pas supprimé! Bon code !! Chti poupon PS: Attention, dans certains hébergements mutualisés où SAFE_MODE est actif, mkdir crée un répertoire inaccessible au téléchargement par php (pb propriétaire). Utiliser alors l'alternative FTP (par exemple ici) On peut aisément détecter le SAFE_MODE comme décrit ici **Pour les accents, on peut traiter le nom de la catégorie et du produit par la fonction accents (proposée par chrysalide dans la contrib MondialRelay): Code function accents($chaine)
{ $conversion = array("¥" => "Y", "µ" => "u", "À" => "A", "Á" => "A", "Â" => "A", "Ã" => "A", "Ä" => "A", "Å" => "A", "Æ" => "A", "Ç" => "C", "È" => "E", "É" => "E", "Ê" => "E", "Ë" => "E", "Ì" => "I", "Í" => "I", "Î" => "I", "Ï" => "I", "Ð" => "D", "Ñ" => "N", "Ò" => "O", "Ó" => "O", "Ô" => "O", "Õ" => "O", "Ö" => "O", "Ø" => "O", "Ù" => "U", "Ú" => "U", "Û" => "U", "Ü" => "U", "Ý" => "Y", "ß" => "s", "à" => "a", "á" => "a", "â" => "a", "ã" => "a", "ä" => "a", "å" => "a", "æ" => "a", "ç" => "c", "è" => "e", "é" => "e", "ê" => "e", "ë" => "e", "ì" => "i", "í" => "i", "î" => "i", "ï" => "i", "ð" => "o", "ñ" => "n", "ò" => "o", "ó" => "o", "ô" => "o", "õ" => "o", "ö" => "o", "ø" => "o", "ù" => "u", "ú" => "u", "û" => "u", "ü" => "u", "ý" => "y", "ÿ" => "y", "°" => ""); return strtr("$chaine", $conversion); } |
|
18 Mar 2015, 17:03
Message
#7
|
|
Ceinture jaune OSC Groupe : Membres Messages : 76 Inscrit : 22-January 10 Lieu : Bourges 18 Membre no 26930 |
Encore une fois merci chti_poupon.
Les accents c'est pas grave avec SEO url 5 pro j'ai été obligé de ne pas les mettre mais je vais quand même étudier ça de plus prêt car cela me permettra peut être de les ajouter. Donc si je résume:
Une fois tout ça fait lorsque je créerais un nouveau produit ou une nouvelle catégorie les répertoires devraient se créer tout seul. C'est bien ça? Il me reste une précision au sujet de la façon de nommer les répertoires. Est ce que je me fie au nom lors de la création des produits ou des répertoires, ou je dois me fier à l'url une fois qu'elle est traitée pas SEO url 5 pro? D'avance merci de ton aide. -------------------- Oscommerce 2.3.4 + Template algozone + Customer_Extra_Fields + Discount_coupon_3.1 + Quick_Updates_2.9.2 + order_edi
tor1.3 + SEO URL 5PRO (R205) + Auto backup + Multiorders V2.1 + oSticket + pdf_customer_invoice_v1.3(problème avec le symbole €) |
|
Version bas débit | Nous sommes le : 29th March 2024 - 13:07 |
Ce site est déclaré auprès de la commision Nationale de l'Informatique et des Libertés (déclaration n°: 1043896) |