Bonjour et bonne année 2015 à tous,

Je perds souvent du temps lors d'intégration de nouveau template avec la mise à jour des chemins assets, js, css etc... Je souhaiterais donc créer un script qui irait parcourir les sous-dossiers du dossier template à la recherche de tous les fichiers de ressources (images comprises) et d'archiver les chemins en base. De cette façon je pourrais par la suite les appelais plus simplement du style :

<?php echo Autopath::css('style'); ?>

ou bien

<?php echo Autopath::img('header.png'); ?>

ou encore

<?php echo Autopath::js(array('jquery-min', 'bootstrap-min')); ?>

Qu'en pensez-vous ?

7 réponses


Grafikart
Réponse acceptée

Dans ce cas là ça me semble bon comme idée :)

La solution ne vient pas forcément d'une fonction mais de comment tu organises ton architecture ;)

</lex>
Auteur

Oui en effet, mais les templates ne sont pas de moi, du coup la plupart du temps l'arborescence est différente d'un template à l'autre.
Admettons que j'ai besoin d'un plugin js dans une vue bien précise, il faut que j’aille chercher et tester à chaque fois le chemin :

http://www.mydomain.com/webroot/common/plugins/nicescroll/v350/nicescroll.js
http://www.mydomain.com/apps/app_name/webroot/template/assets/js/plugins/style-switcher.js

J'ai bien une variable qui me génère le début le chemin jusqu'au template, mais après selon l'architecture de l'auteur je perds du temps à vérifier alors qu'une fonction pourrait faire ça à ma place.

<?php echo Autopath::js(array('nicescroll', 'style-switcher')); ?>

Ensuite je met en cache la vue pour éconnomiser sql

Bonjour.
il faut que j’aille chercher et tester à chaque fois le chemin
Pourquoi tester ? Que tu regardes dans les dossiers où se trouve le fichier, je veux bien, mais tester chaque lien des fichiers, tu ne devrais pas avoir besoin de le faire une fois que tu as vu où se trouve les fichiers dans les dossiers.

J'ai bien une variable qui me génère le début le chemin jusqu'au template, mais après selon l'architecture de l'auteur je perds du temps à vérifier alors qu'une fonction pourrait faire ça à ma place.
Sauf que ta fonction va se lancer et faire un check de tous les fichiers que tu auras définis à chaque chargement de page sur ton site et niveau ressources et performance, c'est loin d'être correct.

Ensuite je met en cache la vue pour éconnomiser sql
Pourquoi, tu stockes le nom des fichiers css et js en base de données ?

Et si tu as 2 fichier style.css à 2 endroits différent ? XD

</lex>
Auteur

@Lartak Oui je dois stocker les chemins dans la base de donnée.

@Grafikart En effet, il est possible que des fichiers de même nom soient présents, dans ce cas il faudra que je précise au moins une partie du chemin parent, la recherche se fera avec un LIKE %.....%

...
SELECT path FROM ressources WHERE template=:template AND type=:type AND path LIKE %:str%
$query->bindParam(':str', $str, PDO::PARAM_STR);
...

L'appel se ferait ainsi :

<?php echo Autopath::css(array('theme/style', 'style')); ?>

Pour éconnomiser les performances je met le rendu en cache.

En cas de modification, je relance la fonction pour explorer le template et mettre à jour la base de données en supprimant les anciens chemins du template concerné. L'appel se ferait ainsi :

<?php echo Autopath::explore('nom_du_template'); ?>
</lex>
Auteur

Ok, merci à SquallX, Lartak et Grafikart pour votre participation.