Bienvenue, Invité
Merci de vous identifier ou de vous inscrire.    Mot de passe perdu?

Requêtes sur les attributs
(1 lecteur(s)) (1) Invité(s)
Aller en basPage: 1
SUJET:

Requêtes sur les attributs

*
#24637
gchatelier
Fresh Boarder
Messages: 5
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Requêtes sur les attributs

Il y a 2 Années
Karma: 0  
Je cherche à construire plusieurs requêtes pour divers besoins de mise à jour des attributs, je prends tout indice sur les tables où il faut chercher !!

Mon premier besoin, c'est de capitaliser la première lettre de toutes les valeurs pour les attributs produit de type texte car certaines ont été saisies avec majuscule, d'autre sans, je souhaite uniformiser l'affichage.

La seconde requête servirai à trouver les identifiants de produits lorsque qu'une ou plusieurs clefs d'url sont identiques, le but est de corriger les éventuels doublons pour que mon sitemap possède des urls uniques.

Le 3ème besoin c'est de trouver tous les produits qui ont des images marquées à "exclure".

Et le complémentaire, très important pour travailler à plusieurs sur l'administration : il faudrait que je puisse déterminer tous les produits qui ont été mis à jour depuis une date donnée.

J'ai bien téléchargé le diagramme de base, mais tout est très confus !!
 
L'administrateur a désactivé l'accès public en écriture.
#24647
Pyksel
Platinum Boarder
Messages: 1401
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Sexe: Masculin lapierredelune blog.magentoo.fr pyksel@live.fr Lieu: Nice Date anniversaire: 12/09

Re:Requêtes sur les attributs

Il y a 2 Années
Karma: 19  
La meilleure solution reste Talend. Du moins c'est de cette façon que je procéde. Pour un diagramme clair utilise mysql workbench qui te permet de créer les diagrammes base avec les dependances depuis ta base

Si ta base permet une connexion extérieure au serveur Talend te permettra de charger les bases puis de les mouliner dans un tMap et de les re-exporter... Je reste bref car c'est pas une procédure aisée si on à pas l'habitude (moi-même j'utilise talend depuis peu).

Voici pour info les codes attributs et a quoi il correspondent : (entity type)

1 = Clients
2 = Livraison
3 = Catégories
4 = Produits

Aprés tu as la méthode php... (à tester car j'ai écris vite ça avant d'aller bosser ^^) - sur une base test evidement ;) Ici je modifie l'attribut nom en lui mettant une majuscule à la première lettre...

Code :


$model = Mage::getModel('catalog/product');

$_product = $model->getCollection();

foreach ($_product as $product) { 
  $data = $product->getData();
  $data['name'] = ucfirst(strtolower($data['name'])); 
  // On met tout en minuscule puis on met au propre avec une majuscule premièrelettre...
  $product->setData($data);
  $product->save();
}



On remplace name par le code attribut à modifier et on fait une opération php qu'on veut...

ex : $data['price'] = $data['price']*2; // multiplie le prix par 2...

On se fait tout ca tranquillement dans un fichier php en racine qu'on appele directement dans le navigateur :

Code :

<?php 
require_once 'app/Mage.php'; 
umask(0); 

Mage::app();
 
$model = Mage::getModel('catalog/product');

$_product = $model->getCollection();

foreach ($_product as $product) { 
  $data = $product->getData();
  $data['name'] = ucfirst(strtolower($data['name'])); // On met tout en minuscule puis on met au propre avec une majuscule premièrelettre...
  $product->setData($data);
  $product->save();
}
?> 



Attention au temps d'execution serveur... ce script fait l'opération de manoère barbare et force l'ensemble... D'où ma préférence pour un ETL comme talend pour faire ça ;) ;) ;)
 
Dernière édition: 12/01/10 à  08:13 Par Pyksel.
L'administrateur a désactivé l'accès public en écriture.
#24648
Pyksel
Platinum Boarder
Messages: 1401
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Sexe: Masculin lapierredelune blog.magentoo.fr pyksel@live.fr Lieu: Nice Date anniversaire: 12/09

Re:Requêtes sur les attributs

Il y a 2 Années
Karma: 19  
Si j'ai le temps dans la journée je vais convertir tout ça en tuto... (ca t'empeche pas de tester entre temps ;) ;) ;))
 
L'administrateur a désactivé l'accès public en écriture.
#24712
gchatelier
Fresh Boarder
Messages: 5
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Re:Requêtes sur les attributs

Il y a 2 Années
Karma: 0  
Merci pour ton aide, ça m'a permis de réfléchir aux outils que j'utilisais.

Avant de faire quoi que ce soit avec la base de donnée, il m'a été bon de voir l'introduction sur le design EAV, je remet le lien wikipédia :

http://en.wikipedia.org/wiki/Entity-Attribute-Value_model


Je suis parvenu à faire ce que je voulais, c'est un bon exercice !!


Générer un liste des doublons sur clef d'url :

Code :


select count(value) as valuecount, value 
from catalog_product_entity_varchar cpev
left join eav_attribute ea 
  on cpev.attribute_id = ea.attribute_id
where attribute_code = 'url_key'
group by value
having valuecount > 1;



Mise en majuscules de la première lettre de certains attributs

Code :


update 
    catalog_product_entity_varchar cpev
    left join eav_attribute ea 
        on cpev.attribute_id = ea.attribute_id
set
    value = concat(upper(substring(cpev.value, 1, 1)), substring(cpev.value from 2))
where 
    ea.is_user_defined = true 
    and ea.backend_type = 'varchar'
    and cpev.value is not null
    and cpev.value != '';



Pour vérifier avant un commit :

Code :


select 
    cpev.value, 
    ea.attribute_code 
from 
    catalog_product_entity_varchar cpev
    left join eav_attribute ea 
        on cpev.attribute_id = ea.attribute_id
where 
    ea.is_user_defined = true 
    and ea.backend_type = 'varchar'
    and cpev.value is not null
    and cpev.value != '';



Pour la première image qui représente un produit, permet d'afficher l'image dans la zone "Plus d'images".


Code :


update catalog_product_entity_media_gallery_value set disabled = false where position = 1;



Tri par dernière modification (Il existe peut être une meilleure façon de faire)


Ce point m'est très utile. Attention je ne sais pas s'il est correct d'ajouter directement des enregistrements de valeurs d'attributs.
Je ne mesure pas non plus l'impact de performances, notament sur les catalogues à plat.
Je n'ai pas remarqué d'anomalie ni de ralentissement sur un catalogue de 1500 références.

Dans l'administration, je crée un attribut de code 'admin_updated_at' de type date, étiqueté "Dernière mise à jour".
Cet attribut ne sera pas visible dans le front office, aussi je sélectionne toutes les propriétés à 'Non'.
J'associe cet attribut au groupe d'attributs par défaut, et par extension, à tous les autres groupes.
Je peux alors sélectionner l'attribut pour l'affichage dans l'extension 'Enhanced Product Grid'.
Cela m'offrira alors la possibilité d'ordonner les produits du catalogue par rapport à cet attribut.
Reste à remplir automatiquement l'attribut avec la date de modification du produit.

Mofifier un produit dans l'admin en prenant soin de saisir une date de dernière modification.
Examiner la table catalog_product_entity_datetime et adapter les valeurs à la requête suivante :

La requête permet d'insérer la valeur d'attribut date de dernière modification pour chaque produit.
Elle modifie la valeur si celle ci est déjà en base.

Code :


insert into catalog_product_entity_datetime (
    value_id, 
    entity_type_id, 
    attribute_id, 
    store_id, 
    entity_id, 
    value

    select 
        null as value_id, 
        4 as entity_type_id, 
        529 as attribute_id, 
        0 as store_id, 
        cpe.entity_id, 
        cpe.updated_at
    from
        catalog_product_entity as cpe
on duplicate key update 
    value = cpe.updated_at;



A partir de ça je peux retrouver les derniers produits modifiés dans la gestion des produits de l'extension 'Enhanced Product Grid'...
 
L'administrateur a désactivé l'accès public en écriture.
#24713
Pyksel
Platinum Boarder
Messages: 1401
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Sexe: Masculin lapierredelune blog.magentoo.fr pyksel@live.fr Lieu: Nice Date anniversaire: 12/09

Re:Requêtes sur les attributs

Il y a 2 Années
Karma: 19  
Je dis bravo

Ce qui serait pas mal serait de créer une insertion compléte d'articles dans la bases avec tous les attributs concernés quelques soient leurs type. Evidement une fois celà fais on peut imaginer le update, voire le delete... Ca permettrais de s'affranchir de l'api ou de l'admin et permettre de mieux gérer celà dans Talend par exemple (que je te conseille) car vu ce que tu nous a pondu comme requete, le cambouis d'une base eav ne semble pas te faire peur ;)

En tout cas tes requetes vont être trés utiles je pense Evidement faut les tester et eprouver mais ca me semble efficace en tout cas...
 
L'administrateur a désactivé l'accès public en écriture.
Revenir en hautPage: 1
Modérateur: admin, Gabriiiel, CaPiT