icone de liste à puce

Citation personnelle #1

La force d'un développeur, ce n'est pas tant le code qu'il écrit que les bugs qu'il fixe!

icone de liste à puce

Export rss avec symfony

Nul besoin d'un bundle tiers pour exporter le flux rss de nos articles.

Il suffit simplement de faire une route vers la page flux.rss, couplée à une action qui récupère les articles publiés en date descendante et qui les donne à un fichier flux.yml.twig.

Ce fichier pourrait ressembler à ceci:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>VS Web | RSS</title>
        <link>http://vsweb.be</link>
        <description>VS Web | flux RSS des articles</description>
        {% for article in articles %}
            <item>
                <title>{{ article.titre }}</title>
                <link>http://vsweb.be/view/post/{{ article.slug }}</link>
                <pubDate>{{ article.date|date('D, d M y H:i:s O') }}</pubDate>
                <description>{{ article.contenu }}</description>
            </item>
        {% endfor %}
    </channel>
</rss>

 

icone de liste à puce

Visualisation des données : 3 vues différentes

La visualisation des données dans un back-office pourrait se faire en s'inspirant des fenêtres windows avec un affichage miniature ou en tableau, au clic.

Pourquoi? Parce que c'est cool! cool

Après, on peut aussi ajouter un bouton zoom pour la vue en liste, pour que le tableau passe dans une position fixed, sur tout l'écran. Bien sûr, dans ce cas, on doit pouvoir sortir du plein écran avec la touche escape ou au clic (voir photos)

icone de liste à puce

Override du controller principal de symfony

Dans certains projets complexes, on peut se retrouver avec plusieurs controllers auxquels on a ajouté des fonctions, recopiées dans chaque controller.

Pour éviter de copier plusieurs fois les mêmes fonctions, il y a plusieurs méthodes possibles. La première consisterait à créer un service. La seconde méthode est de surcharger le controller principal de symfony ( Symfony\Bundle\FrameworkBundle\Controller\Controller ). La méthode n'est pas exactement la même que pour surcharger les controllers de fosuserbundle.

Pour cela, on va créer un controller que l'on va appeler Controller.php dans n'importe lequel de nos Bundles, ou, dans mon cas, dans un bundle controller.

Ce controller sera la copie exacte du controller principal, à part le namespace. On y ajoutera ensuite nos functions.

Ensuite, il suffit de modifier le

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

présent dans tous nos controllers par un use de notre controller surchargé. Et voilà blush, on a maintenant accès à toutes nos functions dans tous nos controllers.

icone de liste à puce

alternative au crud

Le CRRUS(create read restore update softdelete), est mon alternative au CRUD(create read restore delete). Inspiré de softdeleteable de symfony, cela peut s'appliquer à n'importe quel language communiquant avec une base de données. Cette méthode permet de restaurer du contenu supprimé.

Comment ça fonctionne:

  • Ajouter un champ de type boolean avec comme nom softDelete qui vaut 0 à toutes les tables contenant des éléments supprimables
  • Définissez plusieurs niveaux de hiérarchie de rôles d'utilisateur. admin et superAdmin sont les rôles qui pourront supprimer des éléments mais seul le rôle superadmin pourra voir des éléments supprimés et restaurer des éléments
  • Changer votre requête de delete par un update qui définit le champ softDelete à 1
  • Ajouter une route et une action qui définit le champ softDelete à 0, ce sera le restore. Seul le rôle superadmin pourra voir le bouton restore sur les éléments supprimés.
  • Ensuite, vous l'aurez compris, il suffira de créer votre filtre, c-à-d ajouter une condition avant de renvoyer des éléments côté back-office: si l'utilisateur a le rôle superAdmin, je garde la requête comme elle était mais sinon, je modifie la requête pour ne pas prendre les éléments dont softDelete vaut 1.
    Côté front, je change toutes les requêtes pour ne pas prendre les éléments dont softDelete vaut 1. Idem si j'ai des fonctions qui retournent des comptes des enregistrements, il ne faut pas qu'ils comptent des éléments supprimés/filtrés cool
icone de liste à puce

Validation manuelle sous prestashop >1.5

Depuis les dernières versions de prestashop, la validation automatique est par défaut mais si on veut faire uniquement du business to business, c'est un problème.

pour modifier cela, il faut entrer dans le code.  
Il faut copier le fichier controllers/front/AuthController.php dans le dossier override/controllers/front et puis modifier aux alentours de la ligne 433

$customer->active=1;

par:


$customer->active=0;
 

Après cela, il faut modifier le message de confirmation dans les mails account.html et account.txt qui se trouvent dans le dossier mails/{langue}/ afin de prévenir le nouvel utilisateur que son compte devra encore être validé.

Une dernière étape reste, prévenir le client par mail au moment où son compte sera validé. Pour se faire, il y a plusieurs méthodes:

  • Envoyer un mail manuellement.
  • Surcharger l'adminController de la même manière que l'authcontroller et faire appel à la fonction mail native à php.

Bref, rien de bien sorcier! cool