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.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.
Christophe Battarel - Société altairis -

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 ?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 ?
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 : function footer() { toncode } et remplacer l'appel de Page::footer() par footer(); . Ensuite tu mets le code souhaité dans la fonction footer() de ton template.php.
Christophe Battarel - Société altairis -

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.
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 :
Page::footer();
Tu mets à la place :
// the last paragraph
echo '<p>';
// execution time and surfer name, for logged user only (not for indexing robots!)
if(is_callable(array('Surfer', 'get_name')) && Surfer::get_name() && is_callable(array('i18n', 's'))) {
$execution_time = round(get_micro_time() - $context['start_time'], 2);
echo sprintf(i18n::s('Page prepared in %.2f seconds for %s'), $execution_time, ucwords(Surfer::get_name())).BR;
}
// site copyright
if(isset($context['site_copyright']))
echo '© '.$context['site_copyright'];
// a command to authenticate
if(is_callable(array('Surfer', 'is_logged')) && !Surfer::is_logged() && is_callable(array('i18n', 's')))
echo ' - '.Skin::build_link('users/login.php', i18n::s('login'), 'basic').' ';
// about this site
if(is_callable(array('i18n', 's')) && is_callable(array('Articles', 'get_url')))
echo ' - '.Skin::build_link(Articles::get_url('about'), i18n::s('about this site'), 'basic').' ';
// privacy statement
if(is_callable(array('i18n', 's')) && is_callable(array('Articles', 'get_url')))
echo ' - '.Skin::build_link(Articles::get_url('privacy'), i18n::s('privacy statement'), 'basic').' ';
// a reference to YACS
if(is_callable(array('i18n', 's')))
echo ' - '.sprintf(i18n::s('powered by %s'), Skin::build_link(i18n::s('http://www.yetanothercommunitysystem.com/'), i18n::s('yacs'), 'external'));
// all our feeds
if(is_callable(array('i18n', 's')))
echo ' - '.Skin::build_link('feeds/', i18n::s('rss feeds'), 'basic');
// end of the last paragraph
echo '</p>';
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.











