Étendre la classe Page
Problem has been recordedIssue description
Dans
skin.php, on peut mettre du code qui "remplace" celui de skin_skeleton.php pour un skin particulier. C'est ce code qui sera exécuté plutôt que le code de référence. C'est la significatiopn de "Class Skin extends Skin_skeleton". C'est exact ?Je voudrais faire de même avec des bouts de code (fonctions) de
page.php Y a-t-il moyen de créer une classe qui "extends Page" ? Où mettre ces bouts de code pour qu'ils s'appliquent au skin sans modifier le script de référence page.php qui sera écrasé à la prochaine mise à jour ?Comments
| Bernard from nearby-an-airport Associate, 6796 posts | Tu as parfaitement compris la façon dont YACS permet à un développeur d'étendre, ou de modifier, les fonctionnalités de mise en page par le code, en plus des possibiltiés déjà offertes par les feuilles de style. A ce jour, ce mécanisme de surcharge n'est pas disponible pour skins/page.php, tout simplement parce que ce script est utilisé seulement à l'intérieur de template.php. Il suffit donc de remplacer l'appel de page::unefonction() par ton propre code directement dans template.php.
|
| Tof from Grenoble-Chambery 518 posts | Bonsoir Alain, La classe Page.php peut effectivement être étendue dans un autre script mais je te conseille d'y réfléchir à deux fois avant. En effet, les fonctions de cette page appellent des fonction de plus haut niveau définies dans le skin.php Je n'ai personnellement jamais eu besoin de dériver la classe Page, et je pense que Bernard non plus sinon il l'aurait fait en standard. Il m'est arrivé à mes débuts avec Yacs d'y songer, mais je me suis vite rendu compte que c'était inutile et qu'on pouvait faire plus propre et plus joli en dérivant une fonction de skin.php et/ou en modifiant un css. |
| Lasares from L'Île-Bizard à Montréal, Québec 709 posts | Bernard : Si j'ai bien compris, c'est tout simple. Tu me dis que les appels à page.php existent seulement dans template.php. Aucun autre script ne fait appel au contenu de page.php Donc, si je modifie template.php, j'ai ce que je veux dans mon skin, sans affecter les autres skins et sans risquer que ce qui se trouve dans page.php soit exécuté par ailleurs à l'intérieur du skin choisi. À la rigueur, si je recopiais le contenu de page.php dans template.php et que je supprimais page.php, yacs fonctionnerait (avec ce skin seulement, bien sûr). J'ai bon ?
|
| Lasares from L'Île-Bizard à Montréal, Québec 709 posts | Tof : merci de tes bons conseils. Effectivement, vaut mieux faire doublement attention. Pour info, ce qui me pousse à vouloir modifier page.php, c'est que je veux modifier la construction du bas de page, qui y est spécifiée par function footer.Avec ce que me dit Bernard, je comprends qu'il me suffit de reproduire cette fonction dans le template.php du skin et d'y faire les modifications que je désire (en remplaçant Page::footer par Template::footer dans le code initial du template).Est-ce que j'ai bien compris ? |
| Tof from Grenoble-Chambery 518 posts |
Lasares : Tu y es presque Template::footer() est l'appel de la fonction footer de la classe Template. Sauf que la classe Template n'existant pas, l'appel de Template::footer te renverra une erreur "class Template not found" . Tu peux définir une fonction footer dans le template.php :
|
| Lasares from L'Île-Bizard à Montréal, Québec 709 posts | Tof : OK, un gros merci de me guider ainsi. Ma première compréhension était qu'on appelait comme tu me l'indique une fonction dans la même page. Mais comme je n'en trouvais pas d'exemple dans les scripts de yacs (pas assez fouillé, je suppose), j'en avais déduit à tort qu'il fallait faire précéder par le nom du script (mais je comprends maintenant que ce n'est pas le nom du script qui précède, c'est le nom d'une classe). J'y arrive. |
| Bernard from nearby-an-airport Associate, 6796 posts | Alain, si tu considères que les fonctions sont un simple moyen de regrouper des lignes de code ensemble, tu peux sans doute t'en passer comlètement dans ton cas. la solution la plus simple, c'est de recopier le contenu de la fonction et non l'ensemble de la fonction elle-même. Là où tu avais : Tu mets à la place : Et après, tu tripatouilles les commandes pour ajuster le tir ... Bien sûr, ça fait un fichier plus gros, et c'était l'une des motivations initiales pour faire un script skins/page.php et réduire la taille des templates; Mais au moins YACS ne te limite pas du tout quand aux possibilités de mise en page.Un autre point important, c'est que le template peut tout à fait contenir du HTML standard, là où le texte reste fixe. D'ailleurs à l'origine, le PHP a été conçu pour s'incruster dans du HTML. Dans le cas de YACS, gestionnaire de contenu dynamique, on peut dire que les fichiers ne contiennent plus que de PHP. Mais dans ton template, libre à toi de mettre en bas de page le code HTML que tu souhaites, après la balise de fin du code PHP '?' suivi de '>', tout à la fin du fichier. |
Rate this page
Posted by Lasares on Jan. 17, edited by Bernard on Jan. 18, (popular)