Est-il possible d'imprimer les informations ORDER BY de la collection actuelle ?
-
12-12-2019 - |
Question
J'ai créé un module de tri personnalisé que j'essaie de déboguer.Je suis curieux de savoir s'il est possible d'afficher ces informations quelque part dans les pages de mon catalogue (par ex.app/code/design/package/theme/template/catalog/product/list.phtml).Voici la partie observateur de mon module personnalisé où je définis le setOrder :
<?php
class MyExtension_CustomSort_Model_Observer
{
public function onLoadCollection($observer)
{
$collection = $observer->getCollection();
$collection->setOrder('created_at', 'desc');
->setOrder('name', 'asc');
return true;
}
}
J'ai essayé de faire écho et d'utiliser print_r pour afficher mes informations, mais il semble que je me trompe.Aucun conseil?Le résultat final serait pour moi de voir "created_at" et "name" quelque part en haut de la page.
La solution
Mieux encore, enregistrez la requête de la collection dans un fichier séparé.Ou vous pouvez également simplement faire ce que mbalparda a suggéré.L'instruction de commande n'est incorporée que lorsque la collection est chargée.
Pour examiner la requête complète,
// After what you have posted..
$collection->load(true); // ordering is set when the collection is loaded; see ref.
Mage::log($collection->getSelect()->__toString()); // prints the query to var/log/system.log
Note:Assurez-vous de supprimer ->load(true)
une fois le débogage terminé.
Référence: https://stackoverflow.com/questions/9207240/get-collection-query-string
Autres conseils
je ne pense pas qu'un die()
la déclaration est un bon choix.Si vous voulez voir comment votre setOrder
se comporte dans la requête Magento générée pour vous, vous pouvez utiliser le $collection->getSelect()
méthode pour obtenir un dump de la requête SQL.Vous pouvez ensuite faire écho à la sortie de getSelect()
sur votre écran ou peut-être enregistrez-le dans le journal système Magento en utilisant Mage::log('My query: '.$collection->getSelect());
.
Si vous rencontrez des problèmes avec le name
et created_at
attributs à apparaître dans votre requête, vous devrez peut-être les ajouter à la requête en utilisant $collection->addAttributeToSelect(array('name', 'created_at'))
.
Est-ce que ça marche pour toi?
Encore mieux encore, forcer le journal de la collection dans la page de journal que vous souhaitez.Ou vous pouvez simplement faire ce que MusicLiftsme suggère également.
Mage::log($collection->getSelect()->__toString(),null,'thisfile.log',true); // prints the query to var/log/thisfile.log