Best practice

Magento – Tronquer proprement des textes

Il arrive couramment que, par exemple, les textes des descriptions produits soient trop longues pour être affichées correctement. Magento propose en natif des outils permettant de tronquer les textes de façon propre sans couper les mots.

La théorie

La classe Mage_Core_Helper_String contient une méthode truncate() qui facilite le travail. On peut passer différents éléments en arguments :

  • La chaîne à tronquer ($string)
  • La longueur de la chaîne tronquée résultante ($length)
  • Les caractères étant ajoutés si la chaîne est tronquée ($etc)
  • Le reliquat de la chaîne tronquée ($remainder) dont l’utilisation est spéciale, voir ci-après
  • La possibilité de couper ou non les mots lors de leur troncature ($breakWords)

Cette méthode ne gère pas le code HTML. Si un texte à tronquer contient du HTML… le résultat risque d’être plutôt improbable ! Il faut donc nettoyer le texte original de son code HTML avant de le tronquer.

Pour ce faire on utilise la méthode stripTags() de la classe Mage_Core_Helper_Abstract que l’on instancie via sa classe enfant Mage_Core_Helper_Data.

Le code en une ligne aura donc cet aspect :

$newString = Mage::helper('core/string')->truncate(strip_tags($string), $length, $etc, $remainder, false);

Au sujet de $remainder : cet argument doit être déclaré avant l’appel à truncate() sinon, on a une belle erreur « Cannot pass parameter 4 by reference ». Voir ci-après pour l’exemple.

Mise en pratique : tronquer la description d’un produit

L’exemple ci-dessous va tronquer à 30 caractères la description du produit dont l’ID est 158.

Le contenu du champ « Description » de ce produit en back-office est :

 
    • Processor: The Ultra Low Voltage Intel Core Solo U1500 processor offers a 1.33 GHz speed paired with a fast 533 MHz front-side bus and large 2 MB L2 cache. (An L2, or secondary, cache temporarily stores data; and a larger L2 cache can help speed up your system's performance. The FSB carries data between the CPU and RAM, and a faster front-side bus will deliver better overall performance.) The Core Solo processor delivers enhanced performance for today's demanding applications such as CAD tools, 3-D and 2-D modeling, video editing, digital music, digital photography and gaming. And Intel's Smart Cache technology enables smarter, more efficient cache and bus design for enhanced performance, responsiveness and power savings.

Voici la ligne de code permettant de tronquer cette description à 30 caractères sans couper les mots et en ajoutant ‘…’ à la fin de la troncature :

$remainder = ''; // On définit $remainder avant l'appel à la methode truncate()
$newString = Mage::helper('core/string')->truncate(strip_tags(Mage::getModel('catalog/product')->load(158)->getDescription()), 30, '...', $remainder, false);
echo $newString;

Le résultat est donc :

Processor: The Ultra...

Le Gist en cadeau

GitHub

Libre à vous d’intégrer ceci dans un helper que vous appèlerez sur n’importe quel fichier de votre projet Magento.

Hope it helps!

E-Commerce, Magento

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *