Skip to main content Help Control Panel

Alain Lesage


on Jan. 17 2008
from Montréal ou Chambly, Québec

YACS team (Quebec)
Share
Post to Facebook
Tweet about this
Share at LinkedIn
Invite participants
Reference this page
Monitor
Recent files
support »
See also
 

support «   Besoin d'aide «  

Étendre la classe Page

PreviousNextIndex

WorkflowSupport request
StatusProblem has been recorded
  • Submission on Jan. 17 2008 by Lasares
OwnerAlain Lesage
Progress0%
Bon, je n'ai pas le vocabulaire correct en français probablement mais voici mon questionnement.

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 - on Jan. 17 2008
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 - on Jan. 17 2008

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 -
Lasares - on Jan. 17 2008
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 - on Jan. 17 2008
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 - on Jan. 18 2008

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 -
Lasares - on Jan. 18 2008
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 - on Jan. 18 2008
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_timeucwords(Surfer::get_name())).BR;
}

// site copyright
if(isset($context['site_copyright']))
    echo 
'&#169; '.$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.

PreviousNextIndex