var Phenix = function () {
Troll du Web depuis 1996

Web dev

Truc, astuces et tuto sur le CMS SPIP ou sur le développement web en général.

Lire un fichier CSV avec Laravel

J’avais besoin de lire un fichier CSV pour remplir une base de donnée Laravel. C’est assez simple à faire car il y a une super lib pour gérer le CSV :

  1. composer require League/csv

On lit le CSV et on boucle sur chaque élément. Après on en fait ce qu’on veut :) !

  1. <?php
  2. use Illuminate\Database\Seeder;
  3. use Illuminate\Support\Collection;
  4. use Illuminate\Support\Facades\Log;
  5. use League\Csv\Reader;
  6. use League\Csv\Statement;
  7.  
  8. class commune extends Seeder
  9. {
  10.     /**
  11.      * Run the database seeds.
  12.      *
  13.      * @return void
  14.      */
  15.     public function run()
  16.     {
  17.         // Remplir la base de donnée avec les communes du fichier CSV
  18.  
  19.         // Lire le fichier csv
  20.         $csv = Reader::createFromPath(storage_path('app/communes_belges.csv'));
  21.         $csv->setHeaderOffset(0);
  22.  
  23.         // Boucler sur les données du fichier csv
  24.         $records = (new Statement())->process($csv);
  25.         foreach ($records->getRecords() as $record) {
  26.             var_dump($record);
  27.         }
  28.     }
  29. }

Recherche ajax avec les formulaires SPIP

Une recherche « live »

Le but de ce formulaire est une recherche dynamique : a chaque nouvelle lettre dans l’input la recherche s’affine.

La bonne nouvelle c’est qu’on peut faire cela nativement avec les fonctions présentent dans SPIP.

Dans un premier temps, il faut créer un fichier formulaires/recherche_ajax.php. Il va mettre à jour le contexte du formulaire en lui passant un critère de recherche {recherche}.

  1. <?php
  2.  
  3. if (!defined('_ECRIRE_INC_VERSION')) {
  4.         return;
  5. }
  6.  
  7. function formulaires_recherche_ajax_charger_dist($ajax_bloc) {
  8.         return array(
  9.                 'ajax_bloc' => $ajax_bloc,
  10.                 'recherche_'.$ajax_bloc => _request('recherche_'.$ajax_bloc),
  11.                 'lang' => $lang,
  12.         );
  13. }

Ensuite un peu de JavaScript et d’HTML pour recharger un bloc ajax, dans un fichier formulaires/recherche_ajax.html.
Ici, j’ai simplement repris le formulaire de recherche de SPIP en modifiant le name de l’input de recherche.

  1. <div class="formulaire_spip formulaire_recherche[ (#ENV{class})]" id="formulaire_recherche">
  2.         <form action="[(#ENV{action})]" method="get">
  3.                 <div class="editer-groupe">
  4.                         [(#ENV{action}|form_hidden)]
  5.                         [<input type="hidden" name="lang" value="(#ENV{lang})" />]
  6.                         <label for="#ENV{_id_champ}"><:info_rechercher_02:></label>
  7.                         <input type="[(#HTML5|?{search,text})]" class="search text" name="recherche_#ENV{ajax_bloc}" id="#ENV{_id_champ}"[ value="(#ENV{recherche})"] />
  8.                         <input type="submit" class="submit" value="&gt;&gt;" title="<:info_rechercher:>" />
  9.                 </div>
  10.         </form>
  11. </div>

Dans le même fichier, à la fin, un peu de JavaScript pour mettre à jour le bloc_ajax (a savoir un squelette avec la boucle de recherche). Pour plus d’information, sur le fonctionnement d’Ajax avec SPIP, la page de la documentation officiel est bien faite.

  1. <script type="text/javascript">
  2.  // Chaque input déclenche la recherche ajax
  3.  $("#recherche_#ENV{ajax_bloc}").on("input", function () {
  4.          ajaxReload(
  5.                  "#ENV{ajax_bloc}",
  6.                  {
  7.                          args: {
  8.                                  // Envoyer le contenu du formulaire dans le
  9.                                  // contexte de recherche SPIP
  10.                                  recherche: $(this).val()
  11.                          }
  12.                  }
  13.          );
  14.  });
  15. </script>

Dans le bloc ajax (un fichier inclure/grille_article), je place simplement ma boucle de recherche :

  1. [(#SET{defaut_tri, #ARRAY{titre, 1, num titre, 1, date, #ENV{date_sens, -1}, id_article, 1, points, -1
  2.  }})
  3.  
  4. ]<B_article_ajax>
  5.         #ANCRE_PAGINATION
  6.         <BOUCLE_article_ajax(articles){recherche ?}{tri #ENV{par, [(#ENV{recherche}|?{points, num titre})]}, #GET{defaut_tri}}{pagination}>
  7.                 <INCLURE{fond=inclure/article_resume}{id_article} />
  8.         </BOUCLE_article_ajax>
  9.         [<p class="pagination">(#PAGINATION)</p>]
  10. </B_article_ajax>

Il ne reste qu’à appeler tout cela :

  1. [(#FORMULAIRE_RECHERCHE_AJAX{grille_article})
  2.  
  3. ]<INCLURE{fond=inclure/grille_article}{env, ajax=grille_article} />

Pour en savoir plus sur les formulaires de SPIP, rien ne vaut la documentation de spip.net :).


Laravel + Foundation 6

Laraval vient par défaut avec Boostrap. Personnellement, en matière de Framework frontend, je préfère largement Foundation.

Heureusement, il existe un preset pour changer cela proprement dans Laravel. Les autres Tuto ou tout était fait à la main était quand même barbant.

Installer le preset :

Facile, on demande à composer :

  1. composer require laravel-frontend-presets/zurb-foundation

Activé le preset :

Soit on veut juste activer foundation :

  1. php artisan preset foundation

Soit on veut aussi que les templates de base de Laravel soit adapté :

  1. php artisan preset foundation-auth

Il ne reste plus qu’à installer :

  1. npm install && npm run dev
Voir en ligne : Zurb Foundation 6 Preset For Laravel 5.5

Éxecuter du code quand une commande est payée

Lorsque l’on utilise le plugin commande et que l’on souhaite exécuter une peu de code lorsqu’une commande est payée, il suffit d’utiliser ce petit pipeline :

  1. function prefixe_post_edition($flux) {
  2.         if ($flux['args']['table'] == table_objet_sql('commande')
  3.                 and $flux['args']['action'] == 'instituer'
  4.                 and $flux['args']['statut_ancien'] == 'encours'
  5.                 and $flux['data']['statut'] == 'paye'
  6.         ) {
  7.                 $id_commande = $flux['args']['id_objet'];
  8.                 // Coder ici
  9.         }
  10.         return $flux;
  11. }

Un moteur de recherche dans les catégories #Wordpress

Avoir un petit moteur de recherche pour les articles d’une catégorie Wordpress est en fait assez simple, pas besoin de ce lancer dans une chasse aux plugins.

Cela ne demande qu’un petit formulaire à mettre dans le template de catégorie.
Si vous n’avez pas envie de l’avoir dans toutes les catégories, vous pouvez simplement créer un template category-(slug ou ID).php.

  1. <form action="./" method="get">
  2.         <input name="search" type="text" value="<?php echo $_GET['search']; ?>" placeholder="Recherche" />
  3.         <input type="submit" value="Recherche"/>
  4. </form>

Et ensuite une petite WP_Query qui va faire tout le boulot :

  1. <?php
  2. $args = array(
  3. 's' => ($_GET['search']) ?: null, // Un opérateur Elvis, parce que c'est cool !
  4. 'cat' => $cat // L'ID de la catégory
  5. );
  6. $query = new WP_Query( $args );
  7.  
  8. while ( $query->have_posts() ) : $query->the_post();
  9. get_template_part( 'content', 'single' ); // A vous d'avoir un template pour afficher tout ça hein !
  10. endwhile;
  11. wp_reset_postdata();

Rien de sorcier donc, et surtout pas de faille de sécurité plugin usine à gaz d’installer pour faire ce formulaire.