Merge pull request #505 from roadster31/brands

- Brands implementation
- image + documents refactoring
- new smarty functions for form generation.
- lots of code enhancements
This commit is contained in:
Julien
2014-07-08 11:45:44 +02:00
169 changed files with 27453 additions and 3808 deletions

View File

@@ -14,8 +14,6 @@ return array(
'<strong>Warning</strong>, some of your shipping zones are not attached to any delivery module:' => '<strong>Warning</strong>, some of your shipping zones are not attached to any delivery module:',
'A content could be attached to more than one folder. Select here the additional folders for this content.' => 'A content could be attached to more than one folder. Select here the additional folders for this content.',
'A product could be attached to more than one category. Select here the additional categories for this product.' => 'A product could be attached to more than one category. Select here the additional categories for this product.',
'A short description, used when a summary or an introduction is required' => 'A short description, used when a summary or an introduction is required',
'A short post-description information' => 'A short post-description information',
'Aborted orders' => 'Aborted orders',
'Accessory title' => 'Accessory title',
'Action' => 'Action',
@@ -25,6 +23,7 @@ return array(
'Add a condition' => 'Add a condition',
'Add a new Customer' => 'Add a new Customer',
'Add a new address' => 'Add a new address',
'Add a new brand' => 'Add a new brand',
'Add a new category' => 'Add a new category',
'Add a new combination' => 'Add a new combination',
'Add a new content' => 'Add a new content',
@@ -84,6 +83,8 @@ return array(
'Back-office template you want to translate' => 'Back-office template you want to translate',
'Back-office templates' => 'Back-office templates',
'Back-office users' => 'Back-office users',
'Brand created on %date_create. Last modification: %date_change' => 'Brand created on %date_create. Last modification: %date_change',
'Brands' => 'Brands',
'Browse files' => 'Browse files',
'Browse this category' => 'Browse this category',
'Browse this folder' => 'Browse this folder',
@@ -105,6 +106,7 @@ return array(
'Cellular phone number' => 'Cellular phone number',
'Change this administrator' => 'Change this administrator',
'Change this attribute' => 'Change this attribute',
'Change this brand' => 'Change this brand',
'Change this condition' => 'Change this condition',
'Change this country' => 'Change this country',
'Change this coupon' => 'Change this coupon',
@@ -167,6 +169,7 @@ return array(
'Create a new administrator' => 'Create a new administrator',
'Create a new attribute' => 'Create a new attribute',
'Create a new attribute value' => 'Create a new attribute value',
'Create a new brand' => 'Create a new brand',
'Create a new category' => 'Create a new category',
'Create a new combination' => 'Create a new combination',
'Create a new content' => 'Create a new content',
@@ -190,6 +193,7 @@ return array(
'Create coupon' => 'Create coupon',
'Create this address' => 'Create this address',
'Create this attribute' => 'Create this attribute',
'Create this brand' => 'Create this brand',
'Create this category' => 'Create this category',
'Create this combination' => 'Create this combination',
'Create this content' => 'Create this content',
@@ -239,6 +243,7 @@ return array(
'Delete an order' => 'Delete an order',
'Delete attribute' => 'Delete attribute',
'Delete attribute value' => 'Delete attribute value',
'Delete brand' => 'Delete brand',
'Delete category' => 'Delete category',
'Delete content' => 'Delete content',
'Delete country' => 'Delete country',
@@ -258,6 +263,7 @@ return array(
'Delete this accessory' => 'Delete this accessory',
'Delete this administrator' => 'Delete this administrator',
'Delete this attribute' => 'Delete this attribute',
'Delete this brand' => 'Delete this brand',
'Delete this category and all its contents' => 'Delete this category and all its contents',
'Delete this combination' => 'Delete this combination',
'Delete this condition' => 'Delete this condition',
@@ -299,6 +305,7 @@ return array(
'Do you really want to delete this administrator ?' => 'Do you really want to delete this administrator ?',
'Do you really want to delete this attribute ? It will be removed from all product templates.' => 'Do you really want to delete this attribute ? It will be removed from all product templates.',
'Do you really want to delete this attribute value ?' => 'Do you really want to delete this attribute value ?',
'Do you really want to delete this brand ?' => 'Do you really want to delete this brand ?',
'Do you really want to delete this category and all its content ?' => 'Do you really want to delete this category and all its content ?',
'Do you really want to delete this combination ?' => 'Do you really want to delete this combination ?',
'Do you really want to delete this condition ?' => 'Do you really want to delete this condition ?',
@@ -336,7 +343,6 @@ return array(
'Do you really want to use this address by default ?' => 'Do you really want to use this address by default ?',
'Document informations' => 'Document information',
'Documents' => 'Documents',
'Don\'t repeat keywords over and over in a row. Rather, put in keyword phrases.' => 'Don\'t repeat keywords over and over in a row. Rather, put in keyword phrases.',
'Download invoice as PDF' => 'Download invoice as PDF',
'Download purchase order as PDF' => 'Download purchase order as PDF',
'Drop files to upload' => 'Drop files to upload',
@@ -366,6 +372,8 @@ return array(
'Edit an image' => 'Edit an image',
'Edit an order' => 'Edit an order',
'Edit attribute "%name"' => 'Edit attribute "%name"',
'Edit brand' => 'Edit brand',
'Edit brand %title' => 'Edit brand %title',
'Edit category' => 'Edit category',
'Edit category %title' => 'Edit category %title',
'Edit content' => 'Edit content',
@@ -398,6 +406,7 @@ return array(
'Edit tax rule taxes' => 'Edit tax rule taxes',
'Edit template "%name"' => 'Edit template "%name"',
'Edit this address' => 'Edit this address',
'Edit this brand' => 'Edit this brand',
'Edit this category' => 'Edit this category',
'Edit this content' => 'Edit this content',
'Edit this customer' => 'Edit this customer',
@@ -411,6 +420,7 @@ return array(
'Editing %fold' => 'Editing %fold',
'Editing %title' => 'Editing %title',
'Editing attribute "%name"' => 'Editing attribute "%name"',
'Editing brand "%title"' => 'Editing brand "%title"',
'Editing country "%name"' => 'Editing country "%name"',
'Editing coupon "%title"' => 'Editing coupon "%title"',
'Editing currency "%name"' => 'Editing currency "%name"',
@@ -457,6 +467,7 @@ return array(
'Enter information in the default language (%title)' => 'Enter information in the default language (%title)',
'Enter new accessory position' => 'Enter new accessory position',
'Enter new attribute position' => 'Enter new attribute position',
'Enter new brand position' => 'Enter new brand position',
'Enter new category position' => 'Enter new category position',
'Enter new content position' => 'Enter new content position',
'Enter new currency position' => 'Enter new currency position',
@@ -545,7 +556,6 @@ return array(
'Invoice informations' => 'Invoice information',
'Invoice reference' => 'Invoice reference',
'Items to translate' => 'Items to translate',
'Keep the most important part of your description in the first 150-160 characters.' => 'Keep the most important part of your description in the first 150-160 characters.',
'Kg' => 'Kg',
'Label' => 'Label',
'Language name' => 'Language name',
@@ -573,8 +583,6 @@ return array(
'Mailing template name' => 'Mailing template name',
'Mailing template purpose' => 'Mailing template purpose',
'Mailing templates' => 'Mailing templates',
'Make sure it uses keywords found within the page itself.' => 'Make sure it uses keywords found within the page itself.',
'Make sure that your title is clear, and contains many of the keywords within the page itself.' => 'Make sure that your title is clear, and contains many of the keywords within the page itself.',
'Manage attributes included in this product template' => 'Manage attributes included in this product template',
'Manage features included in this product template' => 'Manage features included in this product template',
'Manage module rights' => 'Manage module rights',
@@ -605,10 +613,13 @@ return array(
'No available content in this folder' => 'No available content in this folder',
'No available product in this category' => 'No available product in this category',
'No available value for this attribute' => 'No available value for this attribute',
'No brand' => 'No brand',
'No brand has been created yet. Click the + button to create one.' => 'No brand has been created yet. Click the + button to create one.',
'No categories found' => 'No categories found',
'No country has been created yet. Click the + button to create one.' => 'No country has been created yet. Click the + button to create one.',
'No currency has been created yet. Click the + button to create one.' => 'No currency has been created yet. Click the + button to create one.',
'No folders found' => 'No folders found',
'No logo image' => 'No logo image',
'No mailing template has been created yet. Click the + button to create one.' => 'No mailing template has been created yet. Click the + button to create one.',
'No product attribute has been created yet. Click the + button to create one.' => 'No product attribute has been created yet. Click the + button to create one.',
'No product feature has been created yet. Click the + button to create one.' => 'No product feature has been created yet. Click the + button to create one.',
@@ -664,7 +675,6 @@ return array(
'Port' => 'Port',
'Port :' => 'Port :',
'Position' => 'Position',
'Post Scriptum' => 'Post Scriptum',
'Postage' => 'Postage',
'Postscriptum' => 'Postscriptum',
'Preview' => 'Preview',
@@ -731,7 +741,6 @@ return array(
'Resource' => 'Resource',
'Resource access rights' => 'Resource access rights',
'Resources' => 'Resources',
'Rewritten URL' => 'Rewritten URL',
'Rights' => 'Rights',
'SEO' => 'SEO',
'Sale' => 'Sale',
@@ -790,7 +799,6 @@ return array(
'Shipping zones management' => 'Shipping zones management',
'Shop' => 'Shop',
'Shop Informations' => 'Shop Information',
'Short conclusion' => 'Short conclusion',
'Short description' => 'Short description',
'Short description :' => 'Short description :',
'Show logs' => 'Show logs',
@@ -838,7 +846,6 @@ return array(
'Template title' => 'Template title',
'Templates' => 'Templates',
'Text version of this message' => 'Text version of this message',
'The HTML TITLE element is the most important element on your web page.' => 'The HTML TITLE element is the most important element on your web page.',
'The default pricing is used when no combination is defined.' => 'The default pricing is used when no combination is defined.',
'The destinations processes logs to display, store or send them. You can select and configure zero, one or more destinations below.' => 'The destinations processes logs to display, store or send them. You can select and configure zero, one or more destinations below.',
'The detailed description.' => 'The detailed description.',
@@ -936,6 +943,7 @@ return array(
'Unit. price' => 'Unit. price',
'Unlimited' => 'Unlimited',
'Unlimited number of uses' => 'Unlimited number of uses',
'Unsupported field type \'%type\' in form-field.html' => 'Unsupported field type \'%type\' in form-field.html',
'Update' => 'Update',
'Update an administrator' => 'Update an administrator',
'Update coupon' => 'Update coupon',
@@ -947,6 +955,7 @@ return array(
'Use Ctrl+click to select (or deselect) more that one attribute value' => 'Use Ctrl+click to select (or deselect) more that one attribute value',
'Use Ctrl+click to select (or deselect) more that one category' => 'Use Ctrl+click to select (or deselect) more that one category',
'Use Ctrl+click to select (or deselect) more that one country' => 'Utiliser Ctrl+clic pour sélectionner (ou dé-sélectionner) plusieurs pays.',
'Use Ctrl+click to select (or deselect) more that one item' => 'Use Ctrl+click to select (or deselect) more that one item',
'Use Ctrl+click to select (or deselect) more that one product' => 'Use Ctrl+click to select (or deselect) more that one product',
'Use Ctrl+click to select (or deselect) more that one shipping method' => 'Use Ctrl+click to select (or deselect) more that one shipping method',
'Use Ctrl+click to select more than one value. You can also <a href="#" class="clear_feature_value" data-id="%id">clear selected values</a>.' => 'Use Ctrl+click to select more than one value. You can also <a href="#" class="clear_feature_value" data-id="%id">clear selected values</a>.',
@@ -954,7 +963,6 @@ return array(
'Use Text message defined below' => 'Use Text message defined below',
'Use address by default' => 'Use address by default',
'Use default layout' => 'Use default layout',
'Use the keyword phrase in your URL.' => 'Use the keyword phrase in your URL.',
'Use this address by default' => 'Use this address by default',
'Used in your store front' => 'Used in your store front',
'Username' => 'Username',
@@ -989,7 +997,6 @@ return array(
'You can change the default folder (%title) in the "General" tab.' => 'You can change the default folder (%title) in the "General" tab.',
'You can\'t delete this administrator' => 'You can\'t delete this administrator',
'You can\'t delete this profile' => 'You can\'t delete this profile',
'You don\'t need to use commas or other punctuations.' => 'You don\'t need to use commas or other punctuations.',
'You may also quickly create combinations from products attributes using the <a href="%url" data-toggle="modal">Combination Builder</a>.' => 'You may also quickly create combinations from products attributes using the <a href="%url" data-toggle="modal">Combination Builder</a>.',
'Your current IP address is %ip' => 'Your current IP address is %ip',
'Zip code' => 'Zip code',

View File

@@ -14,8 +14,6 @@ return array(
'<strong>Warning</strong>, some of your shipping zones are not attached to any delivery module:' => '<strong>Attention</strong>, les zones de livraison suivantes ne sont associées à aucun module:',
'A content could be attached to more than one folder. Select here the additional folders for this content.' => 'Un contenu peut être rattaché à plusieurs dossiers. Sélectionnez ici les dossiers dans lesquels ce contenu apparaîtra',
'A product could be attached to more than one category. Select here the additional categories for this product.' => 'Un produit peut être associé à plusieurs rubriques. Sélectionner les rubrique pour lesquels le produit sera associé',
'A short description, used when a summary or an introduction is required' => 'Une courte description, utilisée lorsqu\'un résumé ou une introduction est requise',
'A short post-description information' => 'Champs d\'information complémentaire',
'Aborted orders' => 'Paniers abandonnés',
'Accessory title' => 'Titre de l\'accessoire',
'Action' => 'Action',
@@ -25,6 +23,7 @@ return array(
'Add a condition' => 'Ajouter une condition',
'Add a new Customer' => 'Ajouter un client',
'Add a new address' => 'Ajouter une nouvelle adresse',
'Add a new brand' => 'Ajouter une nouvelle marque',
'Add a new category' => 'Ajouter une catégorie',
'Add a new combination' => 'Ajouter une nouvelle combinaison',
'Add a new content' => 'Ajouter un nouveau contenu',
@@ -84,6 +83,8 @@ return array(
'Back-office template you want to translate' => 'Template back-office à traduire',
'Back-office templates' => 'Templates Back-office',
'Back-office users' => 'Utilisateur du B.O',
'Brand created on %date_create. Last modification: %date_change' => 'Marque créée le %date_create. Dernière modification: %date_change',
'Brands' => 'Marques et Fournisseurs',
'Browse files' => 'Parcourir les fichiers',
'Browse this category' => 'Parcourir cette catégorie',
'Browse this folder' => 'Parcourir ce dossier',
@@ -105,6 +106,7 @@ return array(
'Cellular phone number' => 'Numéro de portable',
'Change this administrator' => 'Modifier cet administrateur',
'Change this attribute' => 'Modifier cette déclinaison',
'Change this brand' => 'Modifiercette marque',
'Change this condition' => 'Modifier cette condition',
'Change this country' => 'Modifier ce pays',
'Change this coupon' => 'Modifier ce code promo',
@@ -167,6 +169,7 @@ return array(
'Create a new administrator' => 'Créer un nouvel administrateur',
'Create a new attribute' => 'Créer une nouvelle déclinaison',
'Create a new attribute value' => 'Créer une nouvelle valeur de déclinaison',
'Create a new brand' => 'Ajouter une nouvelle marque',
'Create a new category' => 'Créer une nouvelle rubrique',
'Create a new combination' => 'Créer une nouvelle combinaison',
'Create a new content' => 'Créer un nouveau contenu',
@@ -190,6 +193,7 @@ return array(
'Create coupon' => 'Créer un code promo',
'Create this address' => 'Créer cette adresse',
'Create this attribute' => 'Créer cette déclinaison',
'Create this brand' => 'Ajouter cette marque',
'Create this category' => 'Créer cette rubrique',
'Create this combination' => 'Créer cette combinaison',
'Create this content' => 'Créer ce contenu',
@@ -239,6 +243,7 @@ return array(
'Delete an order' => 'Supprimer une commande',
'Delete attribute' => 'Supprimer cette déclinaison',
'Delete attribute value' => 'Supprimer une valeur de déclinaison',
'Delete brand' => 'Supprimer cette marque',
'Delete category' => 'Supprimer cette rubrique',
'Delete content' => 'Supprimer le contenu',
'Delete country' => 'Supprimer le pays',
@@ -258,6 +263,7 @@ return array(
'Delete this accessory' => 'Supprimer cet accessoire',
'Delete this administrator' => 'Supprimer cet administrateur',
'Delete this attribute' => 'Supprimer cette déclinaison',
'Delete this brand' => 'Supprimer cette marque',
'Delete this category and all its contents' => 'Supprimer cette rubrique et tout ce qu\'elle contient ?',
'Delete this combination' => 'Supprimer cette combinaison',
'Delete this condition' => 'Supprimer cette condition',
@@ -299,6 +305,7 @@ return array(
'Do you really want to delete this administrator ?' => 'Confirmez-vous la suppression de cet administrateur ?',
'Do you really want to delete this attribute ? It will be removed from all product templates.' => 'Voulez-vous vraiment supprimer cette déclinaison ? Elle sera supprimée de tous les gabarits de produit.',
'Do you really want to delete this attribute value ?' => 'Voulez-vous vraiment supprimer cette déclinaison ?',
'Do you really want to delete this brand ?' => 'Confirmez-vous la suppresison de cette marque ?',
'Do you really want to delete this category and all its content ?' => 'Voulez-vous vraiment supprimer cette rubrique et tout ce qu\'elle contient ?',
'Do you really want to delete this combination ?' => 'Voulez-vous vraiment supprimer cette combinaison ?',
'Do you really want to delete this condition ?' => 'Supprimer cette condition ?',
@@ -336,7 +343,6 @@ return array(
'Do you really want to use this address by default ?' => 'Voulez-vous vraiment utiliser cette adresse comme adresse par défaut ?',
'Document informations' => 'Informations du document',
'Documents' => 'Documents',
'Don\'t repeat keywords over and over in a row. Rather, put in keyword phrases.' => 'Ne répétez pas sans cesse les même mots-clés dans une ligne. Préférez utiliser des expressions de mots-clés',
'Download invoice as PDF' => 'Télécharger la facture au format PDF',
'Download purchase order as PDF' => 'Télécharger le bon de commande au format PDF',
'Drop files to upload' => 'Déposez des fichiers à envoyer',
@@ -366,6 +372,8 @@ return array(
'Edit an image' => 'Modifier une image',
'Edit an order' => 'Editer une commande',
'Edit attribute "%name"' => 'Modifier la déclinaison "%name"',
'Edit brand' => 'Modifier un marque',
'Edit brand %title' => 'Edition de la marque "%title"',
'Edit category' => 'Editer la rubrique',
'Edit category %title' => 'Modifier la rubrique %title',
'Edit content' => 'Modifier le contenu',
@@ -398,6 +406,7 @@ return array(
'Edit tax rule taxes' => 'Modifier les taxes de la règle de taxe',
'Edit template "%name"' => 'Modifier le gabarit "%name"',
'Edit this address' => 'Editer cette adresse',
'Edit this brand' => 'Modifier cette marque',
'Edit this category' => 'Editer cette rubrique',
'Edit this content' => 'Modifier ce contenu',
'Edit this customer' => 'Modifier ce client',
@@ -411,6 +420,7 @@ return array(
'Editing %fold' => 'Modification de %fold',
'Editing %title' => 'En cours de modification de %title',
'Editing attribute "%name"' => 'En cours de modification de la déclinaison "%name"',
'Editing brand "%title"' => 'Edition de la marque "%title"',
'Editing country "%name"' => 'En cours de modification du pays "%name"',
'Editing coupon "%title"' => 'Edition du code promo "%title" ',
'Editing currency "%name"' => 'En cours de modification de la devise "%name"',
@@ -457,6 +467,7 @@ return array(
'Enter information in the default language (%title)' => 'Entrez les informations dans la langue par défaut (%title) ',
'Enter new accessory position' => 'Renseigner la nouvelle position pour cet accessoire',
'Enter new attribute position' => 'Modifier la position de la déclinaison',
'Enter new brand position' => 'Indiquez la position désirée',
'Enter new category position' => 'Classement de la catégorie',
'Enter new content position' => 'Modifier la position du contenu',
'Enter new currency position' => 'Modifier la position de la devise',
@@ -545,7 +556,6 @@ return array(
'Invoice informations' => 'Informations de facturation',
'Invoice reference' => 'Facture ref',
'Items to translate' => 'Elément à traduire',
'Keep the most important part of your description in the first 150-160 characters.' => 'Votre description ne devrait pas dépasser 150 à 160 caractères',
'Kg' => 'Kg',
'Label' => 'Libellé',
'Language name' => 'Nom de la langue',
@@ -573,8 +583,6 @@ return array(
'Mailing template name' => 'Nom du template de mailing',
'Mailing template purpose' => 'Role du template de mailing',
'Mailing templates' => 'Template e-mail',
'Make sure it uses keywords found within the page itself.' => 'Assurez vous d\'utiliser des mots-clés présents dans la page courante',
'Make sure that your title is clear, and contains many of the keywords within the page itself.' => 'Assurez-vous d\'avoir un titre clair et qui contient les mots-clés correspondant à la page en cours',
'Manage attributes included in this product template' => 'Gestion des déclinaisons présentes dans ce gabarit de produit',
'Manage features included in this product template' => 'Gestion des caractéristiques présentes dans ce gabarit de produit',
'Manage module rights' => 'Gestion des droits pour les modules',
@@ -605,10 +613,13 @@ return array(
'No available content in this folder' => 'Ce dossier n\'a pas de contenu',
'No available product in this category' => 'Aucun produit disponible dans cette rubrique',
'No available value for this attribute' => 'Aucune valeur disponible pour cette déclinaison',
'No brand' => 'Aucune marque',
'No brand has been created yet. Click the + button to create one.' => 'Aucune marque n\'a encore été créée. Cliquez le boputon + pour en ajouter une.',
'No categories found' => 'Aucune rubrique trouvée',
'No country has been created yet. Click the + button to create one.' => 'Aucun pays n\'a encore été créé. Cliquez sur le bouton + pour en créer un',
'No currency has been created yet. Click the + button to create one.' => 'Aucune devise n\'a encore été crée. Cliquez sur le bouton + pour en créer une.',
'No folders found' => 'Aucun dossier n\'a été trouvé.',
'No logo image' => 'Aucun logo',
'No mailing template has been created yet. Click the + button to create one.' => 'Aucun template de mailing n\'a encore été créé. Cliquez sur le bouton + pour en ajouter un.',
'No product attribute has been created yet. Click the + button to create one.' => 'Aucune déclinaison produit n\'a encore été créée. Cliquez sur le bouton + pour en créer une.',
'No product feature has been created yet. Click the + button to create one.' => 'Aucune caractéristique produit n\'a encore été ajoutée. Cliquez sur le bouton + pour en créer une.',
@@ -664,7 +675,6 @@ return array(
'Port' => 'Port',
'Port :' => 'Port : ',
'Position' => 'Position',
'Post Scriptum' => 'Post-scriptum',
'Postage' => 'Frais de livraison',
'Postscriptum' => 'Post-scriptum',
'Preview' => 'Prévisualisation',
@@ -731,7 +741,6 @@ return array(
'Resource' => 'Ressource',
'Resource access rights' => 'Droits d\'accès pour les ressources',
'Resources' => 'Ressources',
'Rewritten URL' => 'URL réécrites',
'Rights' => 'Droits',
'SEO' => 'SEO',
'Sale' => 'En promo',
@@ -790,7 +799,6 @@ return array(
'Shipping zones management' => 'Zones de livraison',
'Shop' => 'Boutique',
'Shop Informations' => 'Informations sur la boutique',
'Short conclusion' => 'Courte conclusion',
'Short description' => 'Description courte',
'Short description :' => 'Description courte : ',
'Show logs' => 'Voir les logs',
@@ -838,7 +846,6 @@ return array(
'Template title' => 'Titre du gabarit',
'Templates' => 'Gabarits de produit',
'Text version of this message' => 'Version texte du message',
'The HTML TITLE element is the most important element on your web page.' => 'L\'élément HTML TITLE est le plus important dans votre page',
'The default pricing is used when no combination is defined.' => 'Le prix pas défaut est utilisez lorsqu\'aucune combinaison n\'est utilisé',
'The destinations processes logs to display, store or send them. You can select and configure zero, one or more destinations below.' => 'Les destinations permettent d\'afficher, stocker ou bien envoyer les logs. Vous pouvez en sélectionner zéro, un ou plusieurs dans la liste ci-dessous',
'The detailed description.' => 'La description détaillée.',
@@ -936,6 +943,7 @@ return array(
'Unit. price' => 'Prix unitaire',
'Unlimited' => 'Illimité',
'Unlimited number of uses' => 'Nombre d\'utilisations illimité',
'Unsupported field type \'%type\' in form-field.html' => 'Le type de champ \'%type\' n\'est pas suppporté par form-field.html ',
'Update' => 'Mettre à jour',
'Update an administrator' => 'Mettre à jour cet administrateur',
'Update coupon' => 'Mettre à jour le code',
@@ -947,6 +955,7 @@ return array(
'Use Ctrl+click to select (or deselect) more that one attribute value' => 'Ctrl+clic permet de séléctionner (ou dé-selectionner) plusieurs valeurs de déclinaison.',
'Use Ctrl+click to select (or deselect) more that one category' => 'Ctrl+Clic permet de sélectionner ou dé-sélectionner plus d\'une catégorie',
'Use Ctrl+click to select (or deselect) more that one country' => 'Ctrl+Clic permet de sélectionner ou dé-sélectionner plus d\'un pays',
'Use Ctrl+click to select (or deselect) more that one item' => 'Utilisez Ctrl+clic pour séléctionner (ou dé-selectionner) plus d\'un élément',
'Use Ctrl+click to select (or deselect) more that one product' => 'Ctrl+Clic permet de sélectionner ou dé-sélectionner plus d\'un produit',
'Use Ctrl+click to select (or deselect) more that one shipping method' => 'Ctrl+Clic permet de sélectionner ou dé-sélectionner plus d\'un mode de transport',
'Use Ctrl+click to select more than one value. You can also <a href="#" class="clear_feature_value" data-id="%id">clear selected values</a>.' => 'Utilisez Ctrl+clic pour choisir plus d\'une valeur. Vous pouvez aussi <a href="#" class="clear_feature_value" data-id="%id">tout désélectionner</a>.',
@@ -954,7 +963,6 @@ return array(
'Use Text message defined below' => 'Utiliser la version texte définie ci-dessous',
'Use address by default' => 'Utiliser comme adresse par défaut',
'Use default layout' => 'Utiliser le layout par défaut',
'Use the keyword phrase in your URL.' => 'Utilisez des mots clés dans votre url',
'Use this address by default' => 'Utiliser cette adresse par défaut',
'Used in your store front' => 'Utilisé dans le front de votre boutique',
'Username' => 'Nom d\'utilisateur',
@@ -989,7 +997,6 @@ return array(
'You can change the default folder (%title) in the "General" tab.' => 'Vous pouvez modifier le dossier par défaut (%title) dans l\'onglet "Général".',
'You can\'t delete this administrator' => 'Vous ne pouvez pas supprimer cet administrateur',
'You can\'t delete this profile' => 'Vous ne pouvez pas supprimer ce profil',
'You don\'t need to use commas or other punctuations.' => 'Vous n\'avez pas besoin d\'utiliser de virgules ou d\'autres signes de ponctuation',
'You may also quickly create combinations from products attributes using the <a href="%url" data-toggle="modal">Combination Builder</a>.' => 'Vous pouvez aussi créer rapidement une série de combinaisons avec <a href="%url" data-toggle="modal">le gestionnaire de combinaisons</a>.',
'Your current IP address is %ip' => 'Votre adresse IP est %ip',
'Zip code' => 'Code postal',

View File

@@ -0,0 +1,29 @@
ul.thumbnails.image_picker_selector {
overflow: auto;
list-style-image: none;
list-style-position: outside;
list-style-type: none;
padding: 0px;
margin: 0px; }
ul.thumbnails.image_picker_selector ul {
overflow: auto;
list-style-image: none;
list-style-position: outside;
list-style-type: none;
padding: 0px;
margin: 0px; }
ul.thumbnails.image_picker_selector li.group_title {
float: none; }
ul.thumbnails.image_picker_selector li {
margin: 0px 12px 12px 0px;
float: left; }
ul.thumbnails.image_picker_selector li .thumbnail {
padding: 6px;
border: 1px solid #dddddd;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none; }
ul.thumbnails.image_picker_selector li .thumbnail img {
-webkit-user-drag: none; }
ul.thumbnails.image_picker_selector li .thumbnail.selected {
background: #f39922; }

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,199 @@
{extends file="admin-layout.tpl"}
{block name="after-admin-css"}
{stylesheets file='assets/js/image-picker/image-picker.css'}
<link rel="stylesheet" href="{$asset_url}">
{/stylesheets}
{/block}
{block name="no-return-functions"}
{$admin_current_location = 'tools'}
{/block}
{block name="check-resource"}admin.brand{/block}
{block name="check-access"}view{/block}
{block name="page-title"}{intl l='Edit brand'}{/block}
{block name="main-content"}
<div class="brand edit-brand">
<div id="wrapper" class="container">
{loop name="brand_edit" type="brand" visible="*" id="{$brand_id}" backend_context="1" lang="$edit_language_id"}
<nav>
<ul class="breadcrumb">
<li><a href="{url path='admin/home'}">{intl l='Home'}</a></li>
<li><a href="{url path='admin/tools'}">{intl l='Tools'}</a></li>
<li><a href="{url path='admin/brand'}">{intl l='Brands'}</a></li>
<li>{intl l='Editing brand "%title"' title="$TITLE"}</li>
</ul>
</nav>
<div class="row">
<div class="col-md-12 general-block-decorator">
<div class="row">
<div class="col-md-7 title">
{intl l='Edit brand %title' title={$TITLE}}
</div>
</div>
<div class="row">
<div class="col-md-12">
<ul class="nav nav-tabs" id="tabbed-menu">
<li class="active">
<a href="#general" data-toggle="tab">{intl l="General description"}</a>
</li>
<li><a href="#seo" data-toggle="tab">{intl l="SEO"}</a></li>
<li><a href="#images" data-toggle="tab">{intl l="Images"}</a></li>
<li><a href="#documents" data-toggle="tab">{intl l="Documents"}</a></li>
<li><a href="#modules" data-toggle="tab">{intl l="Modules"}</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane fade active in" id="general">
<div class="form-container">
{form name="thelia.admin.brand.modification"}
<form method="POST" action="{url path="/admin/brand/save/{$ID}"}" {form_enctype form=$form} class="clearfix">
{include file="includes/inner-form-toolbar.html" close_url={url path='/admin/brand'}}
<input type="hidden" name="current_tab" value="general"/>
{* Be sure to get the currency ID, even if the form could not be validated *}
<input type="hidden" name="brand_id" value="{$ID}" />
{form_hidden_fields form=$form}
{render_form_field form=$form field="success_url" value={url path="/admin/brand"}}
{render_form_field form=$form field="locale" value={$edit_language_locale}}
{if $form_error}
<div class="alert alert-danger">{$form_error_message}</div>
{/if}
<div class="row">
<div class="col-md-8">
{include file="includes/standard-description-form-fields.html"}
</div>
<div class="col-md-4">
{render_form_field form=$form field="visible"}
{custom_render_form_field form=$form field='logo_image_id'}
<select {form_field_attributes form=$form field='logo_image_id' extra_class='brand-image-selector'} >
<option value="">{intl l="No logo image"}</option>
{loop name="brand-images" type="image" brand=$ID width="90" height="90" resize_mode="crop"}
<option value="{$ID}" data-img-src="{$IMAGE_URL}" {if $LOGO_IMAGE_ID == $ID}selected="selected"{/if}>{$TITLE}</option>
{/loop}
</select>
{/custom_render_form_field}
</div>
</div>
{include
file="includes/inner-form-toolbar.html"
hide_submit_buttons = false
hide_flags = true
close_url={url path="/admin/brand"}
}
<small>{intl l='Brand created on %date_create. Last modification: %date_change' date_create={format_date date=$CREATE_DATE} date_change={format_date date=$UPDATE_DATE} }</small>
</form>
{/form}
</div>
</div>
<div class="tab-pane fade" id="seo">
{form name="thelia.admin.seo"}
{include
file = "includes/seo-tab.html"
form = $form
formAction = {url path='/admin/brand/seo/save'}
closeUrl = {url path='/admin/brand'}
current_id = $brand_id
}
{/form}
</div>
<div class="tab-pane fade" id="images">
{include file='includes/image-upload-form.html' imageType='brand' parentId=$brand_id}
</div>
<div class="tab-pane fade" id="documents">
{include file='includes/document-upload-form.html' documentType='brand' parentId=$brand_id}
</div>
<div class="tab-pane fade" id="modules">
<div class="form-container">
{include
file = "includes/inner-form-toolbar.html"
hide_submit_buttons = true
page_url = {$pageUrl}
close_url = {$closeUrl}
current_tab = "modules"
}
</div>
{include file="includes/module-tab-content.html" location="brand-edit"}
</div>
</div>
</div>
</div>
</div>
</div>
{/loop}
</div>
</div>
{/block}
{block name="javascript-initialization"}
{javascripts file='assets/js/dropzone.js'}
<script src="{$asset_url}"></script>
{/javascripts}
{javascripts file='assets/js/image-upload.js'}
<script src="{$asset_url}"></script>
{/javascripts}
{javascripts file='assets/js/document-upload.js'}
<script src="{$asset_url}"></script>
{/javascripts}
{javascripts file='assets/js/jquery-ui-1.10.3.custom.min.js'}
<script src="{$asset_url}"></script>
{/javascripts}
{javascripts file='assets/js/image-picker/image-picker.min.js'}
<script src="{$asset_url}"></script>
{/javascripts}
<script>
$(function() {
// Load active tab
$.imageUploadManager.initImageDropZone();
$.documentUploadManager.initDocumentDropZone();
$('.use_default_rewriten_url').click(function(ev) {
alert("Not functionnal");
ev.preventDefault();
});
// Show proper tab, if defined
{if ! empty($current_tab)}
$('.nav-tabs a[href="#{$current_tab}"]').trigger("click");
{/if}
$('.brand-image-selector').imagepicker();
});
</script>
{/block}
{block name="javascript-last-call"}
{module_include location='brand-edit-js'}
{/block}

View File

@@ -0,0 +1,318 @@
{extends file="admin-layout.tpl"}
{block name="no-return-functions"}
{$admin_current_location = 'tools'}
{/block}
{block name="page-title"}{intl l='Brands'}{/block}
{block name="check-resource"}admin.brand{/block}
{block name="check-access"}view{/block}
{block name="main-content"}
<div class="brands">
<div id="wrapper" class="container">
<ul class="breadcrumb">
<li><a href="{url path='/admin/home'}">{intl l="Home"}</a></li>
<li><a href="{url path='/admin/tools'}">{intl l="Tools"}</a></li>
<li><a href="{url path='/admin/brand'}">{intl l="Brands"}</a></li>
</ul>
{module_include location='brands_top'}
<div class="row">
<div class="col-md-12">
<div class="general-block-decorator">
<div class="table-responsive">
<table class="table table-striped table-condensed">
<caption class="clearfix">
{intl l='Brands'}
{loop type="auth" name="can_create" role="ADMIN" resource="admin.brand" access="CREATE"}
<span class="pull-right">
<a class="btn btn-default btn-primary" title="{intl l='Add a new brand'}" href="#creation_dialog" data-toggle="modal">
<span class="glyphicon glyphicon-plus-sign"></span>
</a>
</span>
{/loop}
</caption>
<thead>
<tr>
<th>
{admin_sortable_header
current_order=$order
order='id'
reverse_order='id-reverse'
path='/admin/brands'
label="{intl l='ID'}"
}
</th>
<th>&nbsp;</th>
<th>
{admin_sortable_header
current_order=$order
order='alpha'
reverse_order='alpha-reverse'
path='/admin/brand'
label="{intl l='Name'}"
}
</th>
<th class="text-center">
{admin_sortable_header
current_order=$order
order='manual'
reverse_order='manual-reverse'
path='/admin/brand'
label="{intl l="Position"}"
}
</th>
<th class="text-center">
{admin_sortable_header
current_order=$content_order
order='visible'
reverse_order='visible-reverse'
path={url path='/admin/brand'}
label="{intl l='Online'}"
}
</th>
{module_include location='brands_table_header'}
<th class="actions">{intl l='Actions'}</th>
</tr>
</thead>
<tbody>
{loop name="brands" type="brand" visible="*" backend_context="1" lang=$lang_id order=$order}
<tr>
<td>{$ID}</td>
<td>
{loop type="image" name="folder_image" source="brand" source_id="$ID" limit="1" width="50" height="50" resize_mode="crop" backend_context="1"}
<a href="{url path="admin/brand/update/$OBJECT_ID"}" title="{intl l='Edit this brand'}">
<img src="{$IMAGE_URL}" alt="{$TITLE}" />
</a>
{/loop}
</td>
<td>
{loop type="auth" name="can_change" role="ADMIN" resource="admin.brand" access="UPDATE"}
<a title="{intl l='Change this brand'}" href="{url path="/admin/brand/update/$ID"}">{$TITLE}</a>
{/loop}
{elseloop rel="can_change"}
{$TITLE}
{/elseloop}
</td>
<td class="text-center">
{admin_position_block
resource="admin.brand"
access="UPDATE"
path="/admin/brand/update-position"
url_parameter="brand_id"
in_place_edit_class="brandPositionChange"
position="$POSITION"
id="$ID"
}
</td>
<td class="text-center">
{loop type="auth" name="can_change" role="ADMIN" resource="admin.brand" access="UPDATE"}
<div class="make-switch switch-small visibleToggle" data-id="{$ID}" data-on="success" data-off="danger" data-on-label="<i class='glyphicon glyphicon-ok'></i>" data-off-label="<i class='glyphicon glyphicon-remove'></i>">
<input type="checkbox" class="visibleToggle" {if $VISIBLE == 1}checked="checked"{/if}>
</div>
{/loop}
{elseloop rel="can_change"}
<div class="make-switch switch-small" data-on="success" data-off="danger" data-on-label="<i class='glyphicon glyphicon-ok'></i>" data-off-label="<i class='glyphicon glyphicon-remove'></i>">
<input type="checkbox" class="disabled" disabled="disabled" {if $VISIBLE == 1}checked="checked"{/if}>
</div>
{/elseloop}
</td>
{module_include location='brands_table_row'}
<td class="actions">
<div class="btn-group">
{loop type="auth" name="can_change" role="ADMIN" resource="admin.brand" access="UPDATE"}
<a class="btn btn-default btn-xs brand-change" title="{intl l='Change this brand'}" href="{url path="/admin/brand/update/$ID"}">
<span class="glyphicon glyphicon-edit"></span>
</a>
{/loop}
{loop type="auth" name="can_delete" role="ADMIN" resource="admin.brand" access="DELETE"}
<a class="btn btn-default btn-xs brand-delete" title="{intl l='Delete this brand'}" href="#delete_dialog" data-id="{$ID}" data-toggle="modal">
<span class="glyphicon glyphicon-trash"></span>
</a>
{/loop}
</div>
</td>
</tr>
{/loop}
{elseloop rel="brands"}
<tr>
<td colspan="8">
<div class="alert alert-info">
{intl l="No brand has been created yet. Click the + button to create one."}
</div>
</td>
</tr>
{/elseloop}
</tbody>
</table>
</div>
</div>
</div>
</div>
{module_include location='brands_bottom'}
</div>
</div>
{* Adding a new brand *}
{form name="thelia.admin.brand.creation"}
{* Capture the dialog body, to pass it to the generic dialog *}
{capture "creation_dialog"}
{form_hidden_fields form=$form}
{loop type="lang" name="default-lang" default_only="1"}
{* Switch edition to the current locale *}
<input type="hidden" name="edit_language_id" value="{$ID}" />
{render_form_field form=$form field="locale" value=$LOCALE}
{/loop}
{render_form_field form=$form field="success_url" value={url path='/admin/brand/update/_ID_'}}
{custom_render_form_field form=$form field="title"}
{loop type="lang" name="default-lang" default_only="1"}
{* Switch edition to the current locale *}
<input type="hidden" name="edit_language_id" value="{$ID}" />
{render_form_field form=$form field="locale" value=$LOCALE}
<div class="input-group">
<input type="text" {form_field_attributes form=$form field="title"}>
<span class="input-group-addon"><img src="{image file="assets/img/flags/{$CODE}.png"}" alt="{$TITLE}" /></span>
</div>
{/loop}
{/custom_render_form_field}
{render_form_field form=$form field="visible"}
{module_include location='brand_create_form'}
{/capture}
{include
file = "includes/generic-create-dialog.html"
dialog_id = "creation_dialog"
dialog_title = {intl l="Create a new brand"}
dialog_body = {$smarty.capture.creation_dialog nofilter}
dialog_ok_label = {intl l="Create this brand"}
form_action = {url path='/admin/brand/create'}
form_enctype = {form_enctype form=$form}
form_error_message = $form_error_message
}
{/form}
{* Delete confirmation dialog *}
{capture "delete_dialog"}
<input type="hidden" name="brand_id" id="brand_delete_id" value="" />
{module_include location='brand_delete_form'}
{/capture}
{include
file = "includes/generic-confirm-dialog.html"
dialog_id = "delete_dialog"
dialog_title = {intl l="Delete brand"}
dialog_message = {intl l="Do you really want to delete this brand ?"}
form_action = {url path='/admin/brand/delete'}
form_content = {$smarty.capture.delete_dialog nofilter}
}
{/block}
{block name="javascript-initialization"}
{javascripts file='assets/js/bootstrap-switch/bootstrap-switch.js'}
<script src="{$asset_url}"></script>
{/javascripts}
{javascripts file='assets/js/bootstrap-editable/bootstrap-editable.js'}
<script src="{$asset_url}"></script>
{/javascripts}
<script>
$(function() {
// Set proper brand ID in delete from
$('a.brand-delete').click(function(ev) {
$('#brand_delete_id').val($(this).data('id'));
});
// JS stuff for creation form
{include
file = "includes/generic-js-dialog.html"
dialog_id = "creation_dialog"
form_name = "thelia.admin.brand.creation"
}
{* Inline editing of object position using bootstrap-editable *}
$('.brandPositionChange').editable({
type : 'text',
title : '{intl l="Enter new brand position"}',
mode : 'popup',
inputclass : 'input-mini',
placement : 'left',
success : function(response, newValue) {
// The URL template
var url = "{url noamp='1' path='/admin/brand/update-position' brand_id='__ID__' position='__POS__'}";
// Perform subtitutions
url = url.replace('__ID__', $(this).data('id')).replace('__POS__', newValue);
// Reload the page
location.href = url;
}
});
{* Visibility toggle *}
$(".visibleToggle").on('switch-change', function(event, data) {
$.ajax({
url : "{url path='admin/brand/toggle-online'}",
data : {
brand_id : $(this).data('id'),
action : 'visibilityToggle'
}
});
});
});
</script>
{/block}
{block name="javascript-last-call"}
{module_include location='brands-js'}
{/block}

View File

@@ -35,18 +35,13 @@
hide_submit_buttons = false
page_url = "{url path="/admin/document/type/{$documentType}/{$ID}/update"}"
close_url = "{url path="{$redirectUrl}" noamp=1}"
close_url = "{url path="{$redirectUrl}" current_tab="documents" noamp=1}"
}
{form_hidden_fields form=$form}
{form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{url path="/admin/document/type/{$documentType}/{$ID}/update"}" />
{/form_field}
{form_field form=$form field='locale'}
<input type="hidden" name="{$name}" value="{$edit_language_locale}" />
{/form_field}
{render_form_field form=$form field="success_url" value="{url path="/admin/document/type/{$documentType}/{$ID}/update"}"}
{render_form_field form=$form field="locale" value="$edit_language_locale"}
{if $form_error}<div class="alert alert-danger">{$form_error_message}</div>{/if}
@@ -62,43 +57,15 @@
</div>
<div class="col-md-6">
{form_field form=$form field='file'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<input type="file" id="{$label_attr.for}" name="{$name}" value="" title="{$label}" placeholder="{intl l='File'}">
</div>
{/form_field}
{form_field form=$form field='title'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$TITLE}" title="{$label}" placeholder="{intl l='Title'}">
</div>
{/form_field}
{form_field form=$form field='chapo'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<textarea id="{$label_attr.for}" name="{$name}" class="form-control" title="{$label}" placeholder="{intl l='Chapo'}">{$CHAPO}</textarea>
</div>
{/form_field}
{form_field form=$form field='postscriptum'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<textarea id="{$label_attr.for}" name="{$name}" class="form-control" title="{$label}" placeholder="{intl l='Post Scriptum'}">{$POSTSCRIPTUM}</textarea>
</div>
{/form_field}
{render_form_field form=$form field="file"}
{render_form_field form=$form field="title" value=$TITLE}
{render_form_field form=$form field="chapo" value=$CHAPO}
{render_form_field form=$form field="postscriptum" value=$POSTSCRIPTUM}
</div>
</div>
<div class="row">
<div class="col-md-12">
{form_field form=$form field='description'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<textarea id="{$label_attr.for}" name="{$name}" class="form-control wysiwyg" title="{$label}" placeholder="{intl l='Description'}">{$DESCRIPTION}</textarea>
</div>
{/form_field}
{render_form_field form=$form field="description" value=$DESCRIPTION extra_class="wysiwyg"}
</div>
</div>
@@ -108,7 +75,7 @@
hide_flags = true
page_url = "{url path="/admin/document/type/{$documentType}/{$ID}/update"}"
close_url = "{url path="{$redirectUrl}"}"
close_url = "{url path="{$redirectUrl}" current_tab="documents"}"
}
</form>
{/form}
@@ -128,7 +95,7 @@
<div class="col-md-12">
<div class="row inner-toolbar clearfix">
<div class="col-md-6 inner-actions pull-right">
<a href="{url path="{$redirectUrl}"}" class="btn btn-default btn-info">{intl l='Back'} <span class="glyphicon glyphicon-remove"></span></a>
<a href="{url path="{$redirectUrl}" current_tab="documents"}" class="btn btn-default btn-info">{intl l='Back'} <span class="glyphicon glyphicon-remove"></span></a>
</div>
</div>
<div class="alert alert-error">

View File

@@ -0,0 +1,51 @@
{*
This file defines the standard fields attributes, depending on input types.
In addition to the standard form_field block output, this fragment uses the following additional variables :
- field_template : the template style ('standard', or somethingelse)
- field_value : the value of the input field, which is used if the form_field value is empty.
- field_extra_class : an extra class to add to the input class (see form-field-attributes-standard-renderer.html)
*}
{* Use the optionnal $field_value parameter if no value is defined *}
{if empty($value)}
{$value = $field_value}
{/if}
{* Synthetize an ID if none was given *}
{if empty({$label_attr.for})}
{$label_attr.for = "{$form->getName()}-id-{$field_name}"}
{/if}
{if $disabled}
{$sDisabled = 'disabled'}
{/if}
{if $read_only}
{$sRead_only = 'readonly'}
{/if}
{if $max_length}
{$sMaxLength = "maxlength=\"{$max_length}\""}
{/if}
{if $required}
{$sRequired='aria-required="true" required'}
{/if}
{if $attr_list.placeholder}
{$sPlaceholder = "placeholder=\"{$attr_list.placeholder}\""}
{/if}
{if $type == 'hidden'}
id="{$label_attr.for}" name="{$name}" value="{$value}"
{elseif $type == 'checkbox' || $type == 'radio'}
id="{$label_attr.for}" name="{$name}" class="{$field_extra_class}" value="{$value}" {if $checked}checked="checked"{/if} {$sDisabled} {$sReadonly} {$sRequired nofilter}
{elseif $type == 'choice'}
id="{$label_attr.for}" name="{$name} "class="form-control class="{$field_extra_class}" {if $multiple}multiple{/if} {if $lattr_list.size}size="{$lattr_list.size}"{/if} {$sDisabled} {$sReadonly} {$sRequired nofilter}
{elseif $type == 'textarea'}
id="{$label_attr.for}" name="{$name}" class="form-control {$field_extra_class}" {if $attr_list.rows}rows="{$attr_list.rows}"{/if} {$sMaxLength nofilter} {$sPlaceholder nofilter} {$sDisabled} {$sReadonly} {$sRequired nofilter}
{else}
id="{$label_attr.for}" name="{$name}" value="{$value}" class="form-control {$field_extra_class}" {$sMaxLength nofilter} {$sPlaceholder nofilter} {$sDisabled} {$sReadonly} {$sRequired nofilter}
{/if}

View File

@@ -0,0 +1,120 @@
{*
This file bind a form field to an HTML representation. In addition to the standard form_field block output, this
fragment uses the following additional variables :
- field_template : the template style ('standard', or somethingelse)
- field_value : the value of the input field, which is used if the form_field value is empty.
- field_extra_class : an extra class to add to the input class (see form-field-attributes-standard-renderer.html)
- content : if this variable is not empty, we assume that it contains the input field definition. Used by the
custom_render_form_field block to pass a custom representation of the input field.
*}
{* Get standard fields attributes *}
{capture assign=attributes}
{include file="forms/$field_template/form-field-attributes-renderer.html"}
{/capture}
{if empty($value)}
{$value = $field_value}
{/if}
{if $type == 'hidden'}
<input type="hidden" {$attributes nofilter} />
{elseif $type == 'checkbox'}
<div class="checkbox {if $error}has-error{/if}">
<label>
{if $content == ''}
<input type="checkbox" {$attributes nofilter}>
{$label} {if $required} <span class="required">*</span>{/if}
{else}
{$content nofilter}
{/if}
{form_error form=$form field=$field_name}
<br />
<span class="error">{$message}</span>
{/form_error}
</label>
</div>
{elseif $type == 'radio'}
<div class="radio {if $error}has-error{/if}">
<label>
{if $content == ''}
<input type="radio" {$attributes nofilter}>
{$label} {if $required} <span class="required">*</span>{/if}
{else}
{$content nofilter}
{/if}
{form_error form=$form field=$field_name}
<br />
<span class="error">{$message}</span>
{/form_error}
</label>
</div>
{else}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">
{$label} {if $required} <span class="required">*</span>{/if}
{form_error form=$form field=$field_name}
<br />
<span class="error">{$message}</span>
{/form_error}
</label>
{if $multiple}
<span class="label-help-block">{intl l='Use Ctrl+click to select (or deselect) more that one item'}</span>
{/if}
{if $content == ''}
{if $type == 'choice'}
<select {$attributes nofilter}>
{foreach $choices as $choice}
<option value="{$choice->value}" {if (is_array($value) && in_array($choice->value, $value)) || $choice->value == $value}selected="selected"{/if}>{$choice->label}
{/foreach}
</select>
{elseif $type == 'textarea'}
<textarea {$attributes nofilter}>{$value}</textarea>
{elseif $type == 'money'}
<div class="input-group">
<input type="number" {$attributes nofilter} />
<span class="input-group-addon">{loop name="input.addon" type="currency" default_only="true"}{$SYMBOL}{/loop}</span>
</div>
{else}
{$text_types = ['text', 'password', 'number', 'money', 'integer', 'time', 'date', 'datetime', 'email', 'url', 'file']}
{if in_array($type, $text_types)}
{if $type == 'integer' || $type == 'money'}{$type='number'}{/if}
<input type="{$type}" {$attributes nofilter} />
{else}
<div class="alert alert-danger">{intl l="Unsupported field type '%type' in form-field.html" type=$type}</div>
{/if}
{/if}
{else}
{$content nofilter}
{/if}
{if ! empty($label_attr.help)}
<span class="help-block">{$label_attr.help}</span>
{/if}
</div>
{/if}

View File

@@ -35,18 +35,13 @@
hide_submit_buttons = false
page_url = "{url path="/admin/image/type/{$imageType}/{$ID}/update"}"
close_url = "{url path="{$redirectUrl}" noamp=1}"
close_url = "{url path="{$redirectUrl}" current_tab="images" noamp=1}"
}
{form_hidden_fields form=$form}
{form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{url path="/admin/image/type/{$imageType}/{$ID}/update"}" />
{/form_field}
{form_field form=$form field='locale'}
<input type="hidden" name="{$name}" value="{$edit_language_locale}" />
{/form_field}
{render_form_field form=$form field="success_url" value="{url path="/admin/image/type/{$imageType}/{$ID}/update"}"}
{render_form_field form=$form field="locale" value="$edit_language_locale"}
{if $form_error}<div class="alert alert-danger">{$form_error_message}</div>{/if}
@@ -65,43 +60,15 @@
</div>
<div class="col-md-6">
{form_field form=$form field='file'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<input type="file" id="{$label_attr.for}" name="{$name}" value="" title="{$label}" placeholder="{intl l='File'}">
</div>
{/form_field}
{form_field form=$form field='title'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$TITLE}" title="{$label}" placeholder="{intl l='Title'}">
</div>
{/form_field}
{form_field form=$form field='chapo'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<textarea id="{$label_attr.for}" name="{$name}" class="form-control" title="{$label}" placeholder="{intl l='Chapo'}">{$CHAPO}</textarea>
</div>
{/form_field}
{form_field form=$form field='postscriptum'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<textarea id="{$label_attr.for}" name="{$name}" class="form-control" title="{$label}" placeholder="{intl l='Post Scriptum'}">{$POSTSCRIPTUM}</textarea>
</div>
{/form_field}
{render_form_field form=$form field="file"}
{render_form_field form=$form field="title" value=$TITLE}
{render_form_field form=$form field="chapo" value=$CHAPO}
{render_form_field form=$form field="postscriptum" value=$POSTSCRIPTUM}
</div>
</div>
<div class="row">
<div class="col-md-12">
{form_field form=$form field='description'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<textarea id="{$label_attr.for}" name="{$name}" class="form-control wysiwyg" title="{$label}" placeholder="{intl l='Description'}">{$DESCRIPTION}</textarea>
</div>
{/form_field}
{render_form_field form=$form field="description" value=$DESCRIPTION extra_class="wysiwyg"}
</div>
</div>
@@ -111,10 +78,8 @@
hide_flags = true
page_url = "{url path="/admin/image/type/{$imageType}/{$ID}/update"}"
close_url = "{url path="{$redirectUrl}"}"
close_url = "{url path="{$redirectUrl}" current_tab="images"}"
}
</form>
{/form}
@@ -133,7 +98,7 @@
<div class="col-md-12">
<div class="row inner-toolbar clearfix">
<div class="col-md-6 inner-actions pull-right">
<a href="{url path="{$redirectUrl}"}" class="btn btn-default btn-info">{intl l='Back'} <span class="glyphicon glyphicon-remove"></span></a>
<a href="{url path="{$redirectUrl}" current_tab="images"}" class="btn btn-default btn-info">{intl l='Back'} <span class="glyphicon glyphicon-remove"></span></a>
</div>
</div>
<div class="alert alert-error">

View File

@@ -12,7 +12,7 @@ Parameters:
<ul id="js-sort-image" class="row list-unstyled">
{loop type="image" name="image" source="{$imageType}" order="manual" source_id="{$parentId}" width="200" height="100" resize_mode="borders"}
<li class="col-sm-6 col-md-3 ui-state-default" data-sort-id="{$ID}">
<a href="{url path="/admin/image/type/$imageType/$ID/update"}" alt="{intl l='Update this image'}" class="thumbnail">
<a href="{url path="/admin/image/type/$imageType/$ID/update"}" title="{intl l='Update this image'}" class="thumbnail">
<img src="{$IMAGE_URL}" alt="{$TITLE}">
</a>

View File

@@ -71,6 +71,16 @@
</div>
{/form_field}
{custom_render_form_field form=$form field='brand_id'}
<select {form_field_attributes form=$form field='brand_id'}>
<option value="0">{intl l="No brand"}</option>
{loop name="brand-list" type="brand" visible="*"}
<option value="{$ID}" {if $BRAND_ID == $ID}selected="selected"{/if}>{$TITLE}</option>
{/loop}
</select>
{/custom_render_form_field}
{form_field form=$form field='visible'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{intl l='Visibility'}</label>

View File

@@ -16,59 +16,21 @@
{form_hidden_fields form=$form}
{form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{$closeUrl}">
{/form_field}
{render_form_field form=$form field="success_url"}
{* Display error message if exist *}
{include file='includes/notifications.html' message=$form_error_message}
{form_field form=$form field='url'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">
{$label} :{if $required} <span class="required">*</span>{/if}
</label>
<div class="input-group">
<span class="input-group-addon">{$url_language|default:{config key="url_site"}}</span>
<input type="text" id="{$label_attr.for}" name="{$name}" value="{$value}" title="{intl l='Rewritten URL'}" {if $required} aria-required="true" required{/if} class="form-control" placeholder="{intl l='Use the keyword phrase in your URL.'}">
</div>
{custom_render_form_field form=$form field='url'}
<div class="input-group">
<span class="input-group-addon">{$url_language|default:{config key="url_site"}}/</span>
<input type="text" {form_field_attributes form=$form field='url'}>
</div>
{/form_field}
{/custom_render_form_field}
{form_field form=$form field='meta_title'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">
{$label} :{if $required} <span class="required">*</span>{/if}
<span class="label-help-block">{intl l='The HTML TITLE element is the most important element on your web page.'}</span>
</label>
<div class="control-input">
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$value}"{if $required} aria-required="true" required{/if} title="{$label}" placeholder="{intl l='Make sure that your title is clear, and contains many of the keywords within the page itself.'}">
</div>
</div>
{/form_field}
{form_field form=$form field='meta_description'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">
{$label} :{if $required} <span class="required">*</span>{/if}
<span class="label-help-block">{intl l='Keep the most important part of your description in the first 150-160 characters.'}</span>
</label>
<textarea name="{$name}" id="{$label_attr.for}" rows="6"{if $required} aria-required="true" required{/if} placeholder="{intl l='Make sure it uses keywords found within the page itself.'}" class="form-control">{$value}</textarea>
</div>
{/form_field}
{form_field form=$form field='meta_keywords'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">
{$label} :{if $required} <span class="required">*</span>{/if}
<span class="label-help-block">{intl l='You don\'t need to use commas or other punctuations.'}</span>
</label>
<textarea name="{$name}" id="{$label_attr.for}" rows="3"{if $required} aria-required="true" required{/if} placeholder="{intl l='Don\'t repeat keywords over and over in a row. Rather, put in keyword phrases.'}" class="form-control">{$value}</textarea>
</div>
{/form_field}
{render_form_field form=$form field="meta_title"}
{render_form_field form=$form field="meta_description"}
{render_form_field form=$form field="meta_keywords"}
{include
file = "includes/inner-form-toolbar.html"

View File

@@ -1,43 +1,6 @@
{*
The standard description fields, used by many Thelia objects
*}
{* The standard description fields, used by many Thelia objects *}
{form_field form=$form field='title'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label>
<input type="text" id="{$label_attr.for}" name="{$name}" required="required" title="{intl l='Title'}" placeholder="{intl l='Title'}" class="form-control" value="{$value}">
</div>
{/form_field}
{form_field form=$form field='chapo'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">
{$label} :
<span class="label-help-block">{intl l="A short description, used when a summary or an introduction is required"}</span>
</label>
<textarea name="{$name}" id="{$label_attr.for}" rows="3" title="{intl l='Short description'}" placeholder="{intl l='Short description'}" class="form-control">{$value}</textarea>
</div>
{/form_field}
{form_field form=$form field='description'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">
{$label} :
<span class="label-help-block">{intl l="The detailed description."}</span>
</label>
<textarea name="{$name}" id="{$label_attr.for}" rows="10" class="form-control wysiwyg">{$value}</textarea>
</div>
{/form_field}
{form_field form=$form field='postscriptum'}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">
{$label} :
<span class="label-help-block">{intl l="A short post-description information"}</span>
</label>
<textarea name="{$name}" id="{$label_attr.for}" rows="3" title="{intl l='Short conclusion'}" placeholder="{intl l='Short conclusion'}" class="form-control">{$value}</textarea>
</div>
{/form_field}
{render_form_field form=$form field='title'}
{render_form_field form=$form field="chapo"}
{render_form_field form=$form field="description" extra_class="wysiwyg"}
{render_form_field form=$form field="postscriptum"}

View File

@@ -40,6 +40,13 @@
</tr>
{/loop}
{loop name="auth-export" type="auth" role="ADMIN" resource="admin.brand" access="VIEW"}
<tr>
<td><a href="{url path='/admin/brand'}">{intl l="Brands"}</a></td>
<td><a class="btn btn-default btn-xs" href="{url path='/admin/brand'}"><i class="glyphicon glyphicon-edit"></i></a></td>
</tr>
{/loop}
{loop name="auth-export" type="auth" role="ADMIN" resource="admin.export" access="VIEW"}
<tr>
<td><a href="{url path='/admin/export'}">{intl l="Export"}</a></td>

View File

@@ -64,7 +64,7 @@
<select id="item_name" required="required" name="item_name" class="submit-on-change form-control">
<option value="">{intl l='Please select the module to translate'}</option>
{loop type="module" name="translate-module" backend_context=1 order="alpha"}
{loop type="module" name="translate-module" backend_context=1 order="title"}
<option value="{$ID}" {if $item_name == $ID}selected="selected"{/if}>{$TITLE}</option>
{/loop}
</select>

View File

@@ -16,9 +16,13 @@ return array(
'Address' => 'Address',
'Address %nb' => 'Address %nb',
'Address Update' => 'Address update',
'All brands' => 'All brands',
'All brands in %store' => 'All brands in %store',
'All contents' => 'All contents',
'All contents in' => 'All contents in',
'All product in brand %title' => 'All product in brand %title',
'All products' => 'All products',
'All products for brand %title in %store' => 'All products for brand %title in %store',
'All products in' => 'All products in',
'Amount' => 'Amount',
'Availability' => 'Availability',
@@ -26,6 +30,8 @@ return array(
'Back' => 'Back',
'Billing address' => 'Billing address',
'Billing and delivery' => 'Billing and delivery',
'Brand information' => 'Brand information',
'Brands' => 'Brands',
'Cancel' => 'Cancel',
'Cart' => 'Cart',
'Categories' => 'Categories',
@@ -88,6 +94,7 @@ return array(
'Login Information' => 'Login Information',
'Main Navigation' => 'Main Navigation',
'Minimum 2 characters.' => 'Minimum 2 characters.',
'More information about this brand' => 'More information about this brand',
'Multi-payment platform' => 'Multi-payment platform',
'My Account' => 'My Account',
'My Address Books' => 'My Address Books',
@@ -106,15 +113,16 @@ return array(
'No Content in this folder.' => 'No Content in this folder.',
'No articles currently' => 'No articles currently',
'No deliveries available for this cart and this country' => 'No deliveries available for this cart and this country',
'No products available in this brand' => 'No products available in this brand',
'No products available in this category' => 'No products available in this category',
'No results found' => 'No results found',
'No.' => 'No.',
'Offers' => 'Offers',
'Ok' => 'Ok',
'Order Payment' => 'Order with payment obligation',
'Order details' => 'Order details',
'Order number' => 'Order number',
'Orders over $50' => 'Orders over $50',
'Order Payment' => 'Order with payment obligation',
'Out of Stock' => 'Out of stock',
'Pagination' => 'Pagination',
'Password' => 'Password',

View File

@@ -16,9 +16,13 @@ return array(
'Address' => 'Adresse',
'Address %nb' => 'Adresse n°',
'Address Update' => 'Mise à jour de l\'adresse',
'All brands' => 'Toutes les marques',
'All brands in %store' => 'Toutes les marques %store',
'All contents' => 'Tous les contenus',
'All contents in' => 'tous les contenus de',
'All product in brand %title' => 'Tous les produits de la marque %title',
'All products' => 'Tous les produits',
'All products for brand %title in %store' => 'Tous les produits %title de %store',
'All products in' => 'Tous les produits de',
'Amount' => 'Montant',
'Availability' => 'Disponibilité',
@@ -26,6 +30,8 @@ return array(
'Back' => 'Retour',
'Billing address' => 'Adresse de facturation',
'Billing and delivery' => 'Facturation et livraison',
'Brand information' => 'Marque',
'Brands' => 'Marques',
'Cancel' => 'Annuler',
'Cart' => 'Panier',
'Categories' => 'Rubriques',
@@ -88,6 +94,7 @@ return array(
'Login Information' => 'Informations de connexion',
'Main Navigation' => 'Navigation principale',
'Minimum 2 characters.' => '2 caractères minimum.',
'More information about this brand' => 'Plus de détails sur cette marque',
'Multi-payment platform' => 'Plateforme de paiement multiple',
'My Account' => 'Mon compte',
'My Address Books' => 'Mes carnets d\'adresses',
@@ -106,15 +113,16 @@ return array(
'No Content in this folder.' => 'Aucun contenu dans ce dossier.',
'No articles currently' => 'Aucun article en ce moment',
'No deliveries available for this cart and this country' => 'Aucun mode de livraison disponible pour ce panier et ce pays',
'No products available in this brand' => 'Aucun produit de cette marque n\'est disponible',
'No products available in this category' => 'Aucun produit dans cette catégorie.',
'No results found' => 'Aucun résultat',
'No.' => 'N°',
'Offers' => 'Offres',
'Ok' => 'Ok',
'Order Payment' => 'Commande avec obligation de paiement',
'Order details' => 'Détail de commande',
'Order number' => 'Commande numéro',
'Orders over $50' => 'Commande supérieure à 50€',
'Order Payment' => 'Commande avec obligation de paiement',
'Out of Stock' => 'Hors stock',
'Pagination' => 'Pagination',
'Password' => 'Mot de passe',
@@ -146,10 +154,10 @@ return array(
'Price descending' => 'Prix décroissant',
'Proceed checkout' => 'Continuer la commande',
'Product Empty Button' => 'Ajouter mon premier produit',
'Product Empty Message' => 'Ajouter rapidement un produit.
<ol>
<li>Cochez <strong>Nouveau</strong> dans l\'onglet Prix si vous voulez voir votre produit dans la section Nouveautés.</li>
<li>Cochez <strong>En promo</strong> dans l\'onglet Prix si vous voulez voir votre produit dans la section Offres.</li>
'Product Empty Message' => 'Ajouter rapidement un produit.
<ol>
<li>Cochez <strong>Nouveau</strong> dans l\'onglet Prix si vous voulez voir votre produit dans la section Nouveautés.</li>
<li>Cochez <strong>En promo</strong> dans l\'onglet Prix si vous voulez voir votre produit dans la section Offres.</li>
</ol>',
'Product Empty Title' => 'Bienvenue',
'Product Name' => 'Nom du produit',

View File

@@ -0,0 +1,157 @@
{extends file="layout.tpl"}
{* Body Class *}
{block name="body-class"}page-content{/block}
{* Page Title *}
{block name='no-return-functions' append}
{loop name="brand.seo.title" type="brand" id="{brand attr="id"}"}
{$page_title = {$META_TITLE}}
{/loop}
{/block}
{* Meta *}
{block name="meta"}
{loop name="brand.seo.meta" type="brand" id="{brand attr="id"}"}
{if $META_DESCRIPTION}
<meta name="description" content="{$META_DESCRIPTION}">{/if}
{if $META_KEYWORDS}
<meta name="keywords" content="{$META_KEYWORDS}">{/if}
{/loop}
{/block}
{* Feeds *}
{block name="feeds"}
<link rel="alternate" type="application/rss+xml" title="{intl l='All product in brand %title' title={brand attr='title'}}" href="{url path="/feed/brand/{lang attr='locale'}/{brand attr='id'}"}"/>
{/block}
{* Breadcrumb *}
{block name='no-return-functions' append}
{$breadcrumbs = []}
{loop type="brand" name="brand-breadcrumb" id="{brand attr="id"}"}
{$breadcrumbs[] = ['title' => {$TITLE}, 'url'=> {$URL}]}
{/loop}
{/block}
{block name="main-content"}
<div class="main layout-col-2-left">
{$limit={$smarty.get.limit|default:8}}
{$product_page={$smarty.get.page|default:1}}
{$product_order={$smarty.get.order|default:'alpha'}}
{$mode=$smarty.get.mode|default:'grid'}
<article class="col-main {$mode}" role="main" aria-labelledby="main-label">
{loop name="brand.info" type="brand" current="yes"}
<section class="brand-description">
<h1 id="main-label" class="page-header">{$TITLE}</h1>
{loop name="brand.image" type="image" source="brand" id={$LOGO_IMAGE_ID} width=218 height=146 resize_mode="borders"}
<p><img itemprop="image" src="{$IMAGE_URL}" alt="{$TITLE}"></p>
{/loop}
{if $CHAPO}
<div class="chapo">
{$CHAPO}
</div>
{/if}
{if $DESCRIPTION}
<div class="description">
{$DESCRIPTION nofilter}
</div>
{/if}
{if $POSTSCRIPTUM}
<small class="postscriptum">
{$POSTSCRIPTUM}
</small>
{/if}
</section>
{ifloop rel="product_list"}
<hr/>
{assign var="amount" value="{count type="product" brand="$ID"}"}
<div class="toolbar toolbar-top" role="toolbar">
<div class="sorter-container">
<span class="amount">{if ($amount > 1)}{intl l="%nb Items" nb="{$amount}"}{else}{intl l="%nb Item" nb="{$amount}"}{/if}</span>
<span class="limiter">
<label for="limit-top">{intl l="Show"}</label>
<select id="limit-top" name="limit">
<option value="{url path={navigate to="current"} limit="4"}" {if $limit==4}selected{/if}>4</option>
<option value="{url path={navigate to="current"} limit="8"}" {if $limit==8}selected{/if}>8</option>
<option value="{url path={navigate to="current"} limit="12"}" {if $limit==12}selected{/if}>12</option>
<option value="{url path={navigate to="current"} limit="50"}" {if $limit==50}selected{/if}>50</option>
<option value="{url path={navigate to="current"} limit="100000"}" {if $limit==100000}selected{/if}>All
</option>
</select>
<span class="per-page">{intl l="per page"}</span>
</span><!-- /.limiter -->
<span class="sort-by">
<label for="sortby-top">{intl l="Sort By"}</label>
<select id="sortby-top" name="sortby">
{*<option value="{url path="{brand attr="url"}" order="manual"}">{intl l="Position"}</option>*}
<option value="{url path={navigate to="current"} limit=$limit order="alpha"}" {if $product_order=="alpha"}selected{/if}>{intl l="Name ascending"}</option>
<option value="{url path={navigate to="current"} limit=$limit order="alpha_reverse"}" {if $product_order=="alpha_reverse"}selected{/if}>{intl l="Name descending"}</option>
<option value="{url path={navigate to="current"} limit=$limit order="min_price"}" {if $product_order=="min_price"}selected{/if}>{intl l="Price ascending"}</option>
<option value="{url path={navigate to="current"} limit=$limit order="max_price"}" {if $product_order=="max_price"}selected{/if}>{intl l="Price descending"}</option>
</select>
</span><!-- /.sort-by -->
<span class="view-mode">
<span class="view-mode-label">{intl l="View as"}:</span>
<span class="view-mode-btn">
<a href="{url path={navigate to="current"} mode="grid"}" data-toggle="view" role="button" title="{intl l='Grid'}" rel="nofollow" class="btn btn-grid"><i class="icon-grid"></i></a>
<a href="{url path={navigate to="current"} mode="list"}" data-toggle="view" role="button" title="{intl l="List"}" rel="nofollow" class="btn btn-list"><i class="icon-list"></i></a>
</span>
</span><!-- /.view-mode -->
</div><!-- /.sorter -->
</div><!-- /.sorter-container -->
<div id="category-products">
<div class="products-content">
<ul class="product-col-4">
{loop type="product" name="product_list" brand=$ID limit=$limit page=$product_page order=$product_order}
{include file="includes/single-product.html" product_id=$ID hasBtn=true hasDescription=true hasQuickView=true width="218" height="146"}
{/loop}
</ul>
</div>
</div><!-- /#category-products -->
<div class="toolbar toolbar-bottom" role="toolbar">
{if $amount > $limit}
<div class="pagination-container" role="pagination" aria-labelledby="pagination-label-{$toolbar}}">
<strong id="pagination-label-{$toolbar}}" class="pagination-label">{intl l="Pagination"}</strong>
<ul class="pagination">
<li{if $product_page le 1} class="disabled"{/if}>
<a href="{url path={navigate to="current"} page={$product_page-1} }" title="{intl l="Previous"}" class="prev"><i class="icon-prev"></i></a>
</li>
{pageloop rel="product_list"}
<li{if $PAGE eq $CURRENT} class="active"{/if}>
<a href="{url path={navigate to="current"} page=$PAGE }"> {$PAGE} </a></li>
{if $PAGE eq $LAST}
<li{if $CURRENT eq $LAST} class="disabled"{/if}>
<a href="{url path={navigate to="current"} page={$NEXT} }" title="{intl l="Next"}" class="next"><i class="icon-next"></i></a>
</li>
{/if}
{/pageloop}
</ul>
</div>
{/if}
</div><!-- /.toolbar toolbar-bottom -->
{/ifloop}
{elseloop rel="product_list"}
<div class="address-warning">
{intl l="No products available in this brand"}
</div>
{/elseloop}
{/loop}
</article>
<aside class="col-left" role="complementary" itemscope itemtype="http://schema.org/WPSideBar">
{include file="includes/brand-menu.html"}
</aside>
</div><!-- /.layout -->
{/block}

View File

@@ -7,33 +7,72 @@
{/loop}
{if $_context_ == "catalog"}
<channel>
{if $_id_ == "" }
<title>{intl l="All products in"} {$store_name}</title>
<link>{url path="/"}</link>
<description>{$store_name}</description>
<language>{$locale|replace:'_':'-'|lower}</language>
<lastBuildDate>{$smarty.now|date_format:'r'}</lastBuildDate>
<generator>Thelia 2.0</generator>
{else}
{loop type="category" name="category" id=$_id_ lang=$_lang_ }
<title>{intl l="All products in"} {$TITLE} - {$store_name}</title>
<link>{$URL}</link>
<description>{$CHAPO}</description>
<language>{$LOCALE|replace:'_':'-'|lower}</language>
<pubDate>{format_date date=$UPDATE_DATE format="r"}</pubDate>
<lastBuildDate>{$smarty.now|date_format:'r'}</lastBuildDate>
<generator>Thelia 2.0</generator>
{if $_id_ == "" }
<title>{intl l="All products in"} {$store_name}</title>
<link>{url path="/"}</link>
<description>{$store_name}</description>
<language>{$locale|replace:'_':'-'|lower}</language>
<lastBuildDate>{$smarty.now|date_format:'r'}</lastBuildDate>
<generator>Thelia 2.0</generator>
{else}
{loop type="category" name="category" id=$_id_ lang=$_lang_ }
<title>{intl l="All products in"} {$TITLE} - {$store_name}</title>
<link>{$URL}</link>
<description>{$CHAPO}</description>
<language>{$LOCALE|replace:'_':'-'|lower}</language>
<pubDate>{format_date date=$UPDATE_DATE format="r"}</pubDate>
<lastBuildDate>{$smarty.now|date_format:'r'}</lastBuildDate>
<generator>Thelia 2.0</generator>
{/loop}
{/if}
{loop type="product" name="product" category_default=$_id_ lang=$_lang_ order="id_reverse" }
<item>
<title>{$TITLE}</title>
<link>{$URL}</link>
<description>{$CHAPO}</description>
<pubDate>{format_date date=$CREATE_DATE format="r"}</pubDate>
<guid>{$URL}</guid>
</item>
{/loop}
{/if}
{loop type="product" name="product" category_default=$_id_ lang=$_lang_ order="id_reverse" }
<item>
<title>{$TITLE}</title>
</channel>
{elseif $_context_ == "brand"}
<channel>
{if $_id_ == "" }
<title>{intl l="All brands in %store" store="$store_name"}</title>
<link>{url path="/"}</link>
<description>{$store_name}</description>
<language>{$locale|replace:'_':'-'|lower}</language>
<lastBuildDate>{$smarty.now|date_format:'r'}</lastBuildDate>
<generator>Thelia 2.0</generator>
{loop type="brand" name="brand-list" lang=$_lang_ order="id-reverse" }
<item>
<title>{$TITLE}</title>
<link>{$URL}</link>
<description>{$CHAPO}</description>
<pubDate>{format_date date=$CREATE_DATE format="r"}</pubDate>
<guid>{$URL}</guid>
</item>
{/loop}
{else}
{loop type="brand" name="brand-desc" lang=$_lang_ id=$_id_}
<title>{intl l="All products for brand %title in %store" title="$TITLE" store="$store_name"}</title>
<link>{$URL}</link>
<description>{$CHAPO}</description>
<pubDate>{format_date date=$CREATE_DATE format="r"}</pubDate>
<guid>{$URL}</guid>
</item>
{/loop}
<language>{$locale|replace:'_':'-'|lower}</language>
<lastBuildDate>{$smarty.now|date_format:'r'}</lastBuildDate>
<generator>Thelia 2.0</generator>
{/loop}
{/if}
{loop type="product" name="products-in-brand" brand=$_id_ lang=$_lang_ order="id_reverse" }
<item>
<title>{$TITLE}</title>
<link>{$URL}</link>
<description>{$CHAPO}</description>
<pubDate>{format_date date=$CREATE_DATE format="r"}</pubDate>
<guid>{$URL}</guid>
</item>
{/loop}
</channel>
{else}
<channel>

View File

@@ -0,0 +1,12 @@
<section id="brands" class="block block-nav" role="navigation" aria-labelledby="brands-label">
<div class="block-heading"><h3 class="block-title" id="brands-label">{intl l="Brands"}</h3></div>
<div class="block-content">
<nav class="nav-brands">
<ul id="brand" class="accordion">
{loop name="brands-list" type="brand"}
<li><a href="{$URL}">{$TITLE} ({count type="product" brand="{$ID}"})</a></li>
{/loop}
</ul>
</nav>
</div>
</section>

View File

@@ -6,13 +6,11 @@
{/if}
<article itemscope itemtype="http://schema.org/Product">
<!-- Use the meta tag to specify content that is not visible on the page in any way -->
{loop name="brand.feature" type="feature" product=$product_id title="brand"}
{loop name="brand.value" type="feature_value" feature=$ID product=$product_id}
{loop name="brand" type="brand" product=$product_id }
<meta itemprop="brand" content="{$TITLE}">
{/loop}
{/loop}
{loop name="brand.feature" type="feature" product=$product_id title="isbn"}
{loop name="brand.value" type="feature_value" feature=$ID product=$product_id}
{loop name="isbn.feature" type="feature" product=$product_id title="isbn"}
{loop name="isbn.value" type="feature_value" feature=$ID product=$product_id}
<meta itemprop="productID" content="isbn:{$TITLE}">
{/loop}
{/loop}

View File

@@ -48,13 +48,12 @@
<article itemscope itemtype="http://schema.org/Product">
<!-- Use the meta tag to specify content that is not visible on the page in any way -->
{$product_id=$ID}
{loop name="brand.feature" type="feature" product="{$ID}" title="brand"}
{loop name="brand.value" type="feature_value" feature="{$ID}" product="$product_id"}
<meta itemprop="brand" content="{$TITLE}">
{/loop}
{loop name="brand.feature" type="brand" product="{$ID}"}
<meta itemprop="brand" content="{$TITLE}">
{/loop}
{loop name="brand.feature" type="feature" product=$ID title="isbn"}
{loop name="brand.value" type="feature_value" feature=$ID product=$product_id}
{loop name="isbn.feature" type="feature" product=$ID title="isbn"}
{loop name="isbn.value" type="feature_value" feature=$ID product=$product_id}
<meta itemprop="productID" content="isbn:{$TITLE}">
{/loop}
{/loop}

View File

@@ -67,6 +67,7 @@ GNU General Public License : http://www.gnu.org/licenses/
{* Feeds *}
<link rel="alternate" type="application/rss+xml" title="{intl l='All products'}" href="{url path="/feed/catalog/{lang attr="locale"}"}" />
<link rel="alternate" type="application/rss+xml" title="{intl l='All contents'}" href="{url path="/feed/content/{lang attr="locale"}"}" />
<link rel="alternate" type="application/rss+xml" title="{intl l='All brands'}" href="{url path="/feed/brand/{lang attr='locale'}"}" />
{block name="feeds"}{/block}
{* HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries *}

View File

@@ -1,43 +1,44 @@
{extends file="layout.tpl"}
{* Body Class *}
{block name="body-class"}page-password{/block}
{* Breadcrumb *}
{block name='no-return-functions' append}
{$breadcrumbs = [
['title' => {intl l="Password"}, 'url'=>{url path="/password"}]
]}
{/block}
{block name="main-content"}
<div class="main">
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Password Forgotten"}</h1>
{form name="thelia.front.customer.lostpassword"}
<form id="form-forgotpassword" action="{url path="/password"}" method="post">
{form_hidden_fields form=$form}
<p>{intl l="Please enter your email address below."} {intl l="You will receive a link to reset your password."}</p>
{form_field form=$form field="email"}
<div class="form-group group-email {if $error}has-error{elseif !$error && $value != ""}has-success{/if}">
<label for="{$label_attr.for}">{$label}</label>
<div class="control-input">
<input type="email" name="{$name}" value="{$value}" id="{$label_attr.for}" class="form-control" maxlength="255" aria-required="true" autofocus required>
{if $error}
<span class="help-block">{$message}</span>
{elseif !$error && $value != ""}
<span class="help-block"><span class="icon-ok"></span> {intl l="You will receive a link to reset your password."}</span>
{/if}
</div>
</div>
{/form_field}
<div class="group-btn">
<a href="{url path="/login"}" class="btn btn-cancel">{intl l="Cancel"}</a>
<button type="submit" class="btn btn-forgot">{intl l="Send"}</button>
</div>
</form>
{/form}
</article>
</div>
{/block}
{extends file="layout.tpl"}
{* Body Class *}
{block name="body-class"}page-password{/block}
{* Breadcrumb *}
{block name='no-return-functions' append}
{$breadcrumbs = [
['title' => {intl l="Password"}, 'url'=>{url path="/password"}]
]}
{/block}
{block name="main-content"}
<div class="main">
<article class="col-main" role="main" aria-labelledby="main-label">
<h1 id="main-label" class="page-header">{intl l="Password Forgotten"}</h1>
{form name="thelia.front.customer.lostpassword"}
<form id="form-forgotpassword" action="{url path="/password"}" method="post">
{form_hidden_fields form=$form}
<p>{intl l="Please enter your email address below."} {intl l="You will receive a link to reset your password."}</p>
{if $form_error}<div class="alert alert-danger">{$form_error_message}</div>{/if}
{form_field form=$form field="email"}
<div class="form-group group-email {if $error}has-error{elseif !$error && $value != ""}has-success{/if}">
<label for="{$label_attr.for}">{$label}</label>
<div class="control-input">
<input type="email" name="{$name}" value="{$value}" id="{$label_attr.for}" class="form-control" maxlength="255" aria-required="true" autofocus required>
{if $error}
<span class="help-block">{$message}</span>
{elseif !$error && $value != ""}
<span class="help-block"><span class="icon-ok"></span> {intl l="You will receive a link to reset your password."}</span>
{/if}
</div>
</div>
{/form_field}
<div class="group-btn">
<a href="{url path="/login"}" class="btn btn-cancel">{intl l="Cancel"}</a>
<button type="submit" class="btn btn-forgot">{intl l="Send"}</button>
</div>
</form>
{/form}
</article>
</div>
{/block}

View File

@@ -36,13 +36,12 @@
<article id="product" class="col-main" role="main" itemscope itemtype="http://schema.org/Product">
<!-- Use the meta tag to specify content that is not visible on the page in any way -->
{loop name="brand.feature" type="feature" product="{$ID}" title="brand"}
{loop name="brand.value" type="feature_value" feature="{$ID}" product="{product attr="id"}"}
<meta itemprop="brand" content="{$TITLE}">
{/loop}
{loop name="brand.feature" type="brand" product="{$ID}"}
<meta itemprop="brand" content="{$TITLE}">
{/loop}
{loop name="brand.feature" type="feature" product="{$ID}" title="isbn"}
{loop name="brand.value" type="feature_value" feature="{$ID}" product="{product attr="id"}"}
{loop name="isbn.feature" type="feature" product="{$ID}" title="isbn"}
{loop name="isbn.value" type="feature_value" feature="{$ID}" product="{product attr="id"}"}
<meta itemprop="productID" content="isbn:{$TITLE}">
{/loop}
{/loop}
@@ -102,6 +101,10 @@
<h1 class="name"><span itemprop="name">{$TITLE}</span></h1>
{if $REF}<span itemprop="sku" class="sku">{intl l='Ref.'}: {$REF}</span>{/if}
{loop name="brand_info" type="brand" product="{$ID}"}
<p><a href="{$URL}" title="{intl l="More information about this brand"}"><span itemprop="brand">{$TITLE}</span></a></p>
{/loop}
{if $POSTSCRIPTUM}<div class="short-description">
<p>{$POSTSCRIPTUM}</p>
</div>{/if}
@@ -211,30 +214,59 @@
</section>
{strip}
{capture "additional"}
{ifloop rel="feature_info"}
{capture "additional"}
{ifloop rel="feature_info"}
<ul>
{loop name="feature_info" type="feature" product="{$ID}"}
{ifloop rel="feature_value_info"}
{ifloop rel="feature_value_info"}
<li>
<strong>{$TITLE}</strong> :
{loop name="feature_value_info" type="feature_value" feature="{$ID}" product="{product attr="id"}"}
{$TITLE}
{/loop}
</li>
{/ifloop}
{/ifloop}
{/loop}
</ul>
{/ifloop}
{/capture}
{/ifloop}
{/capture}
{/strip}
{strip}
{capture "brand_info"}
{loop name="brand_info" type="brand" product="{$ID}"}
<p><strong><a href="{$URL}">{$TITLE}</a></strong></p>
{loop name="brand.image" type="image" source="brand" id={$LOGO_IMAGE_ID} width=218 height=146 resize_mode="borders"}
<p><a href="{$URL}"><img itemprop="image" src="{$IMAGE_URL}" alt="{$TITLE}"></a></p>
{/loop}
{if $CHAPO}
<div class="chapo">
{$CHAPO}
</div>
{/if}
{if $DESCRIPTION}
<div class="description">
{$DESCRIPTION nofilter}
</div>
{/if}
{if $POSTSCRIPTUM}
<small class="postscriptum">
{$POSTSCRIPTUM}
</small>
{/if}
{/loop}
{/capture}
{/strip}
<section id="product-tabs">
<ul class="nav nav-tabs" role="tablist">
<li class="active" role="presentation"><a id="tab1" href="#description" data-toggle="tab" role="tab">{intl l="Description"}</a></li>
{if $smarty.capture.additional ne ""}<li role="presentation"><a id="tab2" href="#additional" data-toggle="tab" role="tab">{intl l="Additional Info"}</a></li>{/if}
{if $smarty.capture.brand_info ne ""}<li role="presentation"><a id="tab3" href="#brand_info" data-toggle="tab" role="tab">{intl l="Brand information"}</a></li>{/if}
</ul>
<div class="tab-content">
@@ -242,9 +274,14 @@
<p>{$DESCRIPTION|default:'N/A' nofilter}</p>
</div>
{if $smarty.capture.additional ne ""}
<div class="tab-pane" id="additional" role="tabpanel" aria-labelledby="tab2">
{$smarty.capture.additional nofilter}
</div>
<div class="tab-pane" id="additional" role="tabpanel" aria-labelledby="tab2">
{$smarty.capture.additional nofilter}
</div>
{/if}
{if $smarty.capture.brand_info ne ""}
<div class="tab-pane" id="brand_info" role="tabpanel" aria-labelledby="tab3">
{$smarty.capture.brand_info nofilter}
</div>
{/if}
</div>
</section>