Ho alcune migliaia di prodotti e voglio trovare tutti i prodotti senza un'immagine. Ho provato a cercare (nessuna immagine) nella griglia dei prodotti di amministrazione, ma nessun risultato. Come posso creare una query SQL che disabilita tutti questi prodotti?Come posso trovare tutti i prodotti senza immagini in Magento?
risposta
Ho scritto un articolo del blog un po 'indietro con una query sql per trovare le immagini mancanti. Non disabilita i prodotti, ma è almeno un inizio: http://prattski.com/2010/06/29/magento-sql-to-find-missing-images/. Dovrebbe essere abbastanza facile da fare da questo punto. Potrebbe essere necessario modificare l'ID dell'attributo se il tuo non corrisponde alla mia.
Smettere di pensare in termini di SQL. Inizia a pensare in termini di modelli di Magento. I modelli di Magento semplicemente usano SQL come back-end. È possibile eseguire una query per le operazioni tramite SQL raw, ma varierà dalla versione alla versione di Magento e potrebbe variare in base al back-end che si sta utilizzando.
Eseguire quanto segue da un'azione del controller di test o da un'altra parte in cui è possibile eseguire codice Magento. Interroga il modello per i prodotti senza immagine
//this builds a collection that's analagous to
//select * from products where image = 'no_selection'
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('image', 'no_selection');
foreach($products as $product)
{
echo $product->getSku() . " has no image \n<br />\n";
//var_dump($product->getData()); //uncomment to see all product attributes
//remove ->addAttributeToFilter('image', 'no_selection');
//from above to see all images and get an idea of
//the things you may query for
}
E se volessi tutti i prodotti CON le immagini? – swl1020
@ swl1020 Non ho provato questo, ma un filtro standard non uguale ('neq') dovrebbe funzionare. '' -> addAttributeToFilter ('image', array ("neq" => 'no_selection')); 'La lista completa delle opzioni di filtro è disponibile in questo articolo: http://alanstorm.com/magento_collections –
Le raccolte sono molto meglio di debugging delle istruzioni SQL auto-offensive necessarie per lavorare con EAV in qualsiasi giorno della settimana. Il lavoro è già stato fatto per te, devi solo prestare attenzione alla logica che usi per lavorare con il risultato. –
anche, per ottenere lo sql che la query Alan descrive corre dietro le quinte:
echo (string) $products->getSelect();
Ci sono due modi per farlo:
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('small_image',array('notnull'=>'','neq'=>'no_selection'));
Sopra il codice dovrebbe funzionare ma nel mio caso non funzionava. Così ho provato a seguire:
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('small_image',array('neq'=>'no_selection'));
Buona fortuna!
So che questo è super vecchio, ma l'ho trovato utile, quindi ho pensato di pubblicare un aggiornamento.
In aggiunta alla risposta di Alan sopra, ho scoperto che ci sono altri scenari oltre al "no_selection" .. forse a causa di plug-in o errori generali nel sistema? L'ultimo nlike troverà effettivamente tutto, ma ho lasciato gli altri solo per divertimento.
Modificare la query di raccolta come segue:
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(array(
array (
'attribute' => 'image',
'like' => 'no_selection'
),
array (
'attribute' => 'image', // null fields
'null' => true
),
array (
'attribute' => 'image', // empty, but not null
'eq' => ''
),
array (
'attribute' => 'image', // check for information that doesn't conform to Magento's formatting
'nlike' => '%/%/%'
),
));
per il prodotto senza piccola immagine provare questo
select * from catalog_product_entity_varchar WHERE attribute_id = 86 AND value = 'no_selection'
ritrovamento attribute_id in eav_attribute tavolo
voglio solo aggiungere che la risposta di Sean Michaud ha ragione, tranne che non abbiamo bisogno di usare quello
array (
'attribute' => 'image', // null fields
'null' => true
),
Utilizzando la pagina: http://bytes.com/topic/sql-server/answers/83267-wildcard-doesnt-match-using-like-varchar-field-wierd
"Un valore NULL è non la stessa come una stringa di lunghezza zero.NULL rappresenta l'assenza di qualsiasi valore, e lo standard SQL dice che un valore NULL non è mai uguale a qualsiasi altro valore tra cui un altro NULL"
Quindi %/%/%
non sarà possibile ottenere i valori NULL, ma aggiungendo il codice dall'alto ci sarà correggere l'errore e ottenere i campi di immagine con i valori NULL. questo è il risultato
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(array(
array (
'attribute' => 'image', // null fields
'null' => true
),
array (
'attribute' => 'image', // check for information that doesn't conform to Magento's formatting
'nlike' => '%/%/%'
),
));
Se si desidera lavorare con tutti gli attributi dell'immagine, il codice potrebbe essere come questo
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(array(
array (
'attribute' => 'image', //Check for information that doesn't conform to Magento's formatting
'nlike' => '%/%/%'
),
array (
'attribute' => 'small_image', //Check for information that doesn't conform to Magento's formatting
'nlike' => '%/%/%'
),
array (
'attribute' => 'thumbnail', //Check for information that doesn't conform to Magento's formatting
'nlike' => '%/%/%'
),
array (
'attribute' => 'image', //Check for null fields
'null' => true
),
array (
'attribute' => 'small_image', //Check for null fields
'null' => true
),
array (
'attribute' => 'thumbnail', //Check for null fields
'null' => true
),
));
Ho provato tutte queste risposte in varie combinazioni e ho ricevuto solo un piccolo sottoinsieme del mio catalogo. Il motivo: ho originariamente importato i miei prodotti utilizzando uno script di importazione dell'immagine prodotto su misura.
Se non ho specificato le immagini per alcune righe durante l'importazione, lo script non ha creato NULL
o valori di attributo vuoti per tali immagini. Semplicemente non ha creato le righe di attributo.
Poiché addAttributeToFilter
utilizza un join INNER
per impostazione predefinita e non c'era alcun valore di attributo immagine a cui partecipare, le query pubblicate qui non catturavano quegli SKU.
Il seguente codice restituisce tutti i prodotti per i quali immagini, small_image o miniatura sono nulli, non correttamente formattato, o la riga manca del tutto.
Il terzo parametro su addAttributeToFilter
consente di specificare il tipo di join da utilizzare in combinazione con le clausole OR
dell'istruzione WHERE
.
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(
array(
array(
'attribute' => 'image',
'null' => '1'
),
array(
'attribute' => 'small_image',
'null' => '1'
),
array(
'attribute' => 'thumbnail',
'null' => '1'
),
array(
'attribute' => 'image',
'nlike' => '%/%/%'
),
array(
'attribute' => 'small_image',
'nlike' => '%/%/%'
),
array(
'attribute' => 'thumbnail',
'nlike' => '%/%/%'
)
),
null,
'left'
);
Se, come me, si desidera convertire questo a una query SQL per esportare come file CSV dal tuo client SQL, è sufficiente stampare la query dallo script PHP:
echo $products->getSelect();
ho visto alcuni SQL pubblicati su StackOverflow che codificano gli interi attribute_id
che si riferiscono agli attributi image
, small_image
e thumbnail
, ma possono differire da un'installazione all'altra. In Magento, l'interrogazione con l'ORM è molto meglio che con l'SQL.
Ho provato tutti, ma questo funziona per me quando catalogo piatto è consentire
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(
array(
array(
'attribute' => 'image',
'null' => '1'
),
array(
'attribute' => 'small_image',
'null' => '1'
),
array(
'attribute' => 'thumbnail',
'null' => '1'
),
array(
'attribute' => 'image',
'nlike' => '%/%/%'
),
array(
'attribute' => 'small_image',
'nlike' => '%/%/%'
),
array(
'attribute' => 'thumbnail',
'nlike' => '%/%/%'
)
),
null,
'left'
);
È possibile utilizzare questo SQL solo per vedere quale prodotto non ha immagini:
SELECT * FROM catalog_product_entity_media_gallery RIGHT OUTER JOIN catalog_product_entity ON catalog_product_entity.entity_id = catalog_product_entity_media_gallery.entity_id WHERE catalog_product_entity_media_gallery.value is NULL
Good Luck!
- 1. Magento importa prodotti con immagini
- 2. Come rimuovere tutti i prodotti del catalogo in Magento
- 3. Come abilitare tutti i prodotti in tutti i negozi
- 4. Prestashop tutti i prodotti
- 5. Magento - Trova i prodotti disponibili con l'inventario
- 6. Magento: come si ottengono prodotti associati del gruppo di prodotti?
- 7. Come assegnare categorie per i prodotti in magento Programmaticamente
- 8. Ottenere prodotti da un ordine in Magento
- 9. Magento ottiene tutti i prodotti in una determinata categoria ordinata dal campo "Posizione"
- 10. Magento: come rimuovere tutti i reindirizzamenti permanenti
- 11. Magento importazione immagini
- 12. Aggiorna i prodotti a livello di codice in Magento
- 13. Magento load collection di prodotti compresi prodotti disabilitati
- 14. Come posso selezionare tutti i collegamenti alle immagini in Prototype
- 15. MAGENTO - Visualizza i prodotti della sottocategoria nella categoria radice
- 16. Come rimuovere tutti i link ai prodotti cross-sell da Magento?
- 17. API Magento: assegnazione di prodotti preesistenti semplici a prodotti configurabili
- 18. Raccolta prodotti Magento Ottieni solo prodotti da determinate categorie
- 19. Come posso trovare tutti i metodi di estensione in soluzione?
- 20. Come posso trovare tutti i file estratti in TFS 2010?
- 21. Magento: ordinamento di una raccolta di prodotti
- 22. Magento: Confronta il collegamento prodotti non funziona
- 23. Magento collezione di prodotti con particolare id
- 24. Magento Configura prodotti con 100 di permutazioni
- 25. come ottenere tutti i prodotti della categoria amazon
- 26. Magento: mostra i prodotti di una categoria specifica nel footer
- 27. Realizzare breadcrumb coerenti sulle singole pagine dei prodotti in Magento?
- 28. Magento API SOAP Elenco prodotti Paginazione
- 29. Magento Migrare i clienti senza password.
- 30. ottieni gli ultimi prodotti usando l'API di magento soap
@ Michael Myers: perché l'hai modificato quasi un anno dopo la pubblicazione? –
@ Zéychin: non ci sono limiti di legge sulle modifiche. Ogni volta che vedi qualcosa che potrebbe essere migliorato, per favore sentiti libero di andare avanti e farlo. In questo caso, ero qui perché qualcuno ha postato una non risposta che sono venuto a cancellare. –
Oh sì, è giusto. Ho appena visto: modificato da ..., e dal modo in cui è posizionato, sembra che tu abbia modificato la domanda apparentemente, non rimossa la (falsa) risposta! Questo ha molto più senso. Saluto il tuo lavoro per questa comunità. –