Xav. par Xav. - Moi, moi et moi !
27th juil 09

Billet très bref et concis sur un problème auquel j’ai été confronté lors de la migration de ce vers . D’ailleurs, à ce jour, aucune date de sortie précise n’est encore prévue étant donné mes disponibilités assez aléatoires et limitées ces temps-ci. Mais revenons à ce fameux problème.

Afin d’optimiser au mieux mon application, maitre mot de la nouvelle release, j’ai souhaité passer mes fichiers CSS, scripts Javascripts et autres images sur différents sous-domaines (vous pourrez retrouver de nombreux articles sur le blog de Thomas Parisot concernant l’optimisation, en plus, c’est un bordelais éhéh!), sans avoir à modifier le core de . Je suis bien trop feignant pour avoir une installation de par répertoire et modifier le fichier AssetHelper. (celui qui définit les fonctions use_javascript(), image_tag() et use_stylesheet()) exploserait complètement mes projets liés à cette installation d’où l’importance de ne pas y toucher. L’autre problématique concerne l’organisation des helpers en soit puisque ces trois fonctions ne sont pas définies dans une classe et impossible, à ma connaissance, à surcharger donc. Pourtant, c’est un peu le principe que j’ai utilisé pour arriver à mes fins.

Pré-requis

Pour cette exemple, j’utiliserai les répertoires par défaut de ainsi que les sous-domaines suivants:

Je n’expliquerai pas comment les rendre accessibles puisqu’il suffit simplement de les faire pointer sur les répertoires par défaut.

Création du personnalisé

Dans un premier temps, nous allons créer nos helpers qui vont tout simplement venir « surcharger » ceux qui existent déjà dans le but de limiter au maximum le nombre de lignes et de ne pas perturber le bon fonctionnement du reste. Nous procédons à la création du fichier « customHelper. » dans le répertoire ./lib/helpers/ puisque j’envisage éventuellement de le réutiliser dans mon backend (à voir par la suite…). Nous ajoutons donc notre code comme suit (notez la grande nouveauté de la soirée, j’ai enfin installé un syntax highlighter !!) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
< ?php
 
function custom_image_tag($img, $params = array())
{
    if (!$img{strlen($img) - 4} != '.')
    {
        $img .= '.png';
    }
    return image_tag(sfConfig::get('app_custom_img_dir', 'http://images.blog/') . $img, $params);
}
 
function custom_use_javascript($js, $position = '', $options = array())
{
    return use_javascript(sfConfig::get('app_custom_js_dir', 'http://js.blog/') . $js, $position, $options);
}
 
function custom_use_stylesheet($css, $position = '', $options = array())
{
    if (!$css{strlen($css) - 4} != '.')
    {
        $css .= '.css';
    }
 
    return use_stylesheet(sfConfig::get('app_custom_css_dir', 'http://css.blog/') . $css, $position = '', $options = array());
}

Aucun commentaire, le code est simplissime… Petite limitation pour les fichiers CSS et images qui n’ont pas nécessairement d’extension et qui, malgré le fait qu’elle soit ajoutée automatiquement (.css pour les fichiers CSS et .png pour les fichiers images) n’est pas retournée correctement ce qui pose problème lors de l’appel vers le serveur. Les javascripts sont pourtant bien chargés…

Dans notre exemple, j’ai volontairement utilisé des appels à sfConfig() uniquement pour me simplifier la migration vers le serveur de production par la suite mais, comme vous pouvez vous en douter, je ne l’ai pas défini, d’où l’url par défaut !

Enfin, n’oubliez pas de modifier éventuellement vos feuilles de styles si elles font appel à des images.

Utilisation

Avant même d’aligner une ligne de code, on rajoute immédiatement « custom » à notre ligne « standard_helper » de notre fichier ./apps/frontend/config/settings.yml suivi d’un bon vieux cc. La syntaxe reste donc parfaitement identique à celle existante hormis le fait qu’il faille préfixer le nom des fonctions par « custom_ ». Exemple: custom_image_tag() à la place de image_tag(). Pour modifier les adresses des sous domaines, n’oubliez pas de rajouter les lignes suivantes dans votre fichier ./apps/frontend/config/app.yml:
custom_css_dir: http://css.exemple.com/
custom_js_dir: http://js.exemple.com/
custom_img_dir: http://img.exemple.com/

Bonne nuit journée!

  • Share/Bookmark

One Comment

Laisser un commentaire

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Search

Facebook Connect

Déjà membre?
Login

Derniers visiteurs

Flickr Photos

Victoiiiiiiiiiiirrrrrrreeeeeeee!!!Guerre du référencementIMG_0183IMG_0182IMG_0181IMG_0180IMG_0179IMG_0178IMG_0177IMG_0176