Skip to main content Help Control Panel

YACS CMS : Open source !

Community «   Le forum «   Soupçons de bogues «  

Ajout d'un script php à un template [résolu]

avatar Gérard -- on Oct. 29 2006, from le Web Parisien
YACS team - Modérateur
Bonjour,

Est-il possible d'ajouter un script php (un bout de code php) a un template ?

Au delà de la question basique, ce que je souhaiterais pouvoir faire c'est remplacer le header de mon template (à l'endroit où il y a le titre et le slogan dans un template dérivé de boxeandarrows), par un script qui affiche une image aléatoire lors de chaque chargement de la page (donc image différente à chaque page et images stockées dans un répertoire donné)

De la même façon, j'envisage de pouvoir insérer ce même type de script dans une boite extra pour afficher un texte aléatoire (texte stocké dans un fichier .txt) pour une sorte de affichage de 'citations'

En surfant sur le net, j'ai vu qu'il existait des scripts php simples pour faire cela (style rotator.php ou alors la fonction rand) mais je ne sais pas comment les insérer dans le fichier template.php (si c'est bien cela qu'il faut faire) !!

pour info, je ne sais pas trop utiliser le php, j'essaie yacs sur mon site ici mon template est dérivé de boxeandarrows
Bernard
avatar
from nearby-an-airport
Associate, 6927 posts

on Nov. 1 2006


La démarche est effectivement la bonne. Le fichier template.php est du PHP 'pur', et non un langage de template exotique comme avec d'autres gestionnaires de contenu... Voilà c'est dit...

Pour en revenir à votre question, il s'agit de marier les exemples de code PHP qui fourmillent sur Internet avec le code de base des mises en page fournies avec YACS.

Pour la gestion de l'en-tête aléatoire

Le template.php génère une division de page nommée. Par exemple pour boxesandarrows :

// the header panel comes before everything
echo '<div id="header_panel">'.'n';



Normalement ceci est pris en charge de manière statique par la feuille de style css, à l'identifiant #header_panel.

Dans votre cas, il faudrait rajouter du code pour faire une sélection aléatoire, et remplacer les lignes de template.php citées précédemment par ce qui suit.

// table of available background images
$images = array('1.jpg''2.jpg''3.jpg');

// get a random index in table
$index array_rand($images);

// the header panel comes before everything
echo 'div id="header_panel" style="background: transparent
    url('
.$context['url_to_root'].$context['skin'].'/images/'.$images[$index].'
    ) top left repeat-x;">'
."n";



Dans cet exemple, j'ai supposé que vous aviez trois images d'en-tête placées dans le sous-répertoire images de votre style, nommées 1.jpg, etc.

Vous pouvez en avoir plus, bien entendu, et il suffit de modifier le contenu de la variable $images pour l'adapter à votre cas particulier.

Ajouter une boîte extra

Tout ce que le script template.php connait des boîtes extra, c'est une variable qui les contient toutes. Il suffit de compléter cette variable pour ajouter une boîte au début ou à la fin de la liste. Par exemple, pour dire coucou en haut de page :

// titre de la boite
$titre 'coucou';

// contenu de la boite
$contenu 'un peu de contenu';

// mise en page de la boite
$boite Skin::build_box($titre$contenu'extra');

// insertion en haut de page
$context['extra'] = $boite.$context['extra'];



Bien sur il faudrait adapter le titre et le contenu à votre cas précis. Le tout devra être inséré dans template.php, avant l'envoi de la variable au navigateur. Pour boxesandarrows, ce pourrait être juste avant la ligne :

Page::side(TRUE);



Bienvenue dans le monde merveilleux de PHP...
Hardboiled
avatar
from le Web Parisien
175 posts

inspired from Bernard on Nov. 3 2006


Bernard :

Bernard :

Merci de cette réponse très utile mais encore un peu absconse pour un néophyte comme moi en matière de php.

-  J'ai bien réussi à créer une boite extra pour mes citations du jour mais je voudrais changer le contenu par des phrases aléatoires (script phrase rotator ou autre). Je continue à tâtonner avec le php.

-  Pour l'image du header et l'affichage aléatoire, quand je copie le 'code' que tu m'as aimablement proposer, cela ne marche pas car il doit y avoir une erreur quelque part (je n'ai pas encore trouver où) car en ouvrant template.php dans dreamveaver les lignes après la modification du code ne sont plus bonnes (cela doit être un pb de nombres de ' ou de ' ou de ( et autres [... D'ailleurs les couleurs de ton script (tout vert pour la partie header) me laisse à penser qu'il y a un pb, car normalement on a du bleu (echo) du rouge etc.. comme plus haut. Je sais cela n'est pas très pro mais je fais avec mes pauvres moyens.

Sinon Merci pour cette réactivité !!!
Bernard
avatar
from nearby-an-airport
Associate, 6927 posts

inspired from hardboiled on Nov. 3 2006


Hardboiled: bien vu, bien vu. J'ai "oublié" le caractère inférieur avant la balise div dans echo 'div... parce que YACS ne l'accepte pas encore dans le validateur XHTML...
Hardboiled
avatar
from le Web Parisien
175 posts

on Nov. 4 2006


Bernard :

Merci de cette réponse mais c'est quoi le caractère inférieur ?

Que faut-il écrire au juste; d'ailleurs quand j'essaie de l'écrire dans ce message à l'aperçu je n'ai plus rien !!

En un mot je suis perdu

Au fait existe il un validateur de code php qui me permettrait de corriger cela ou de trouver ou est l'erreur (je rappelle que je parle aussi bien php qu'une vache espagnole)
Bernard
avatar
from nearby-an-airport
Associate, 6927 posts

inspired from Bernard on Nov. 6 2006


Bernard: le caractère inférieur, c'est < tout simplement...
Hardboiled
avatar
from le Web Parisien
175 posts

on Nov. 18 2006


Bernard :

J'essaie toujours d'insérer un code php dan mon template sans y arriver. J'ai bien créé la nouvelle boite extra comme indiqué (super ça marche, j'ai modifié le titre) mais maintenant je voudrais remplacer 'un peu de contenu'(c'est à dire le texte affiché) dans
// contenu de la boite
$contenu 'un peu de contenu';

par un texte variable issu d'un script php du type
$quote file('quotes.txt'); 
srand((double)microtime()*1000000); 
echo 
$quote[rand(0,count($quote))];

Est-ce possible et si oui quelle est la bonne syntaxe php ? J'avoue que j'ai essayé des tas de possibilités sans y arriver (dans la majeure partie des cas je n'ai plus rien qui s'affiche)

Pour les images aléatoires je n'ai toujours pas réussi même avec tes indications.

Merci d'avance
Bernard
avatar
from nearby-an-airport
Associate, 6927 posts

inspired from hardboiled on Nov. 18 2006


Hardboiled: Il faut remplacer le 'echo' par une assignation de variable. Dans l'exemple fourni :
$quote file('quotes.txt'); 
srand((double)microtime()*1000000); 
$contenu $quote[rand(0,count($quote))];

Fernand
avatar
from Paris
1312 posts

on Jan. 16 2007


Bernard : Une question inspirée par l'explication ci-dessus concernant les images aléatoires dans le header. Quelle est la signification repeat-x; ?
J'ai essayé en nommant mes images 1, 2,3 etc. par un nom. J'obtiens une frise (car ce sont de petites images). mais si j'écris top left repeat-3, par exemple (afin d'en obtenir seulement 3 alignées en haut à gauche), ou bien top left no-repeat; , je n'arrive pas à obtenir autre chose qu'une même frise continue...
Je croyais que si l'onvoulait obtenir une seule image par parution d'un article dans le header, no-repeat aurait fonctionné... Dois-je, dans ce cas, retourner dans la CSS ? et toucher à quelle classe ?

Hardboiled: j'aime bien cette idée
ThierryP
avatar
from Nice, Drap
Associate, 1373 posts

inspired from Fernand on Jan. 16 2007


Fernand :

repeat-x = répéte les images horizontallement
repeat-y = répéte les images verticalement
repeat = répéte les images (tous sens)
no-repeat= pas de répétition d'image !
Hardboiled
avatar
from le Web Parisien
175 posts

inspired from Fernand on Jan. 16 2007


Fernand :

Salut,

Comme tu as l'air d'avoir réussi à mettre des images aléatoires dans le header (contrairement à moi) pourrais tu m'indiquer exactement la syntaxe du script php utilisé (et/ou le CSS) Merci d'avance.
Fernand
avatar
from Paris
1312 posts

inspired from Hardboiled on Jan. 16 2007


Hardboiled : Tu dois remplacer le morceau de code cité plus haut par Bernard:
// the header panel comes before everything
echo '<div id="header_panel">'.'n';


... Par celui-ci (corrigé ici), dans template.php de ton skin, bien évidemment:
// table of available background images
$images = array('1.jpg''2.jpg''3.jpg');

// get a random index in table
$index array_rand($images);

// the header panel comes before everything
echo '<div id="header_panel" style="background: transparent
    url('
.$context['url_to_root'].$context['skin'].'/images/'.$images[$index].'
    ) top left repeat-x;">'
."n";


Auparavant, tu auras bien entendu placé les images dans le répertoire images de ton skin... Et, tu leur donnera dans le code ci-dessus le nom qu'elles ont réellement (pas nécessairement une numérotation).
En fait, ça doit absolument fonctionner ainsi !. Ne fais donc pas l'erreur que j'ai d'abord commise : ne pas attendre !
En effet, la chose met parfois un peu de temps à se mettre en place... Je fais une petite maquette pour l'un de mes amis écrivain en "boxesandarrows". J'ai placé quelques bêtises comme images... Ainsi que dans le contenu... De manière à lui donner envie rapidement de prendre les choses en main sur son propre site, et aussi de manière à tester une forme d'harmonie graphique. Etant donné que ça n'est pas abouti, je n'aime pas le montrer mais je t'envoies l'adresse par mail (il me semble que tu ne déteste pas vraiment le sujet de l'écriture) si tu me fais parvenir une adresse e-mail (ne figurant pas dans ton profil de membre). Tu verras que que le défilé des petites images dans le "header" fonctionne bien aléatoirement... C'est assez amusant d'ailleurs. Merci encore pour cette idée
Si tu n'y arrivais vraiment pas, je t'enverrais le template.php, tu n'aurais qu'à remplacer le nom des images. Pas de soucis.

Relevé des copies demain sur ton site ?

Edited by Bernard on Mar. 3 2007

Fernand
avatar
from Paris
1312 posts

inspired from ThierryP on Jan. 16 2007


ThierryP : Merci pour cette réponse claire et concise. Je n'avais plus les yeux en face des trous au bout de quelques heures de plongée dans les divers codes... Et puis, comme je le disais plus haut, je n'ai pas attendu suffisamment longtemps le résultat de mes essais avec no-repeat... Il fallait sans doute le temps que ça se mette en place (site de test sur Free). Toutefois, je vais le laisser quelques heures encore comme tel, pour Gérard, si il veut jeter un coup d'oeil au rendu.
Hardboiled
avatar
from le Web Parisien
175 posts

inspired from Fernand on Jan. 18 2007


Fernand :

Un Grand MERCI à Fernand grace à qui j'ai enfin pu mettre au point l'affichage d'une image aléatoire dans le header. J'ai même un peu adapté le script pour avoir une image aléatoire au lieu du slogan (image qui change à droite) et une image fixe au lieu du header title (image à gauche).

Super et encore Merci

le résultat est visible ici !
Fernand
avatar
from Paris
1312 posts

inspired from Hardboiled on Jan. 19 2007


Hardboiled : Cela me donne envie de relire quelques enquêtes de l'inspecteur Rason: une affaire resurgit que l'on croyait enterrée au "bureau des affaires classées" (Roy Vickers, grand auteur de polars). Cette idée s'adapte parfaitement à ton site.
Hardboiled
avatar
from le Web Parisien
175 posts

on Mar. 3 2007


Bonjour,

Je reviens sur ce topic, car j'ai encore quelques soucis pour insérer un autre code php (désolé mais je suis nul en php).
Je voudrais donc ajouter le code ci dessous dans une boite mais je n'y arrive toujours pas.
include $HTTP_SERVER_VARS['DOCUMENT_ROOT'].'/twatch_include/api.php';
twatch_connect();
echo 
twatch_value('visitors','yesterday');

il s'agit d'un code pour donner les stats de visiteurs. Pourriez vous me donner un coup de main, SVP?

NOta: je ne suis pas encore passé à la version 7.1, quels sont vos premeirs retours, très positifs ??
Car je suis totalement perdu maintenant dans le forum et le nouveau site de yacs, à moitié french, moitié anglais et j'ai du mal à retrouver les rubriques du forum !!!
Bernard
avatar
from nearby-an-airport
Associate, 6927 posts

inspired from Hardboiled on Mar. 3 2007


Hardboiled: Ce que je comprend de l'interface applicative de TraceWatch, c'est qu'il faudrait faire comme ceci :

// titre de la boite
$title 'Visites hier';

// contenu
include $context['path_to_root'].'twatch_include/api.php';
twatch_connect();
$content twatch_value('visitors','yesterday');

// creer une boite complete
$box Skin::build_box($title$content'extra');

// inserer dans la zone extra
$context['extra'] .= $box;



Ce code suppose que le répertoire twatch_include est sous la racine d'installation de YACS. Il faut l'insérer dans template.php, avant la ligne qui mentionne l'usage de $context['extra'].
Hardboiled
avatar
from le Web Parisien
175 posts

on Mar. 5 2007


Merci Bernard
Cela marche super
Si j'osais insister et profiter de tes lumières, serait-il possible d'avoir plusieurs variables?? Avec ta manip, j'ai donc une boîte et dedans juste le chiffre du nombre de visiteurs pour le mois.

Ce que je voudrais pouvoir faire (si cela est possible) est d'avoir dans la même boîte les infos suivantes

-  Aujourd'hui : xx
où xx = $content = twatch_value('visitors','today');
-  Ce mois ci : yy
où yy = $content = twatch_value('visitors','this_month');
-  Total : zz
où zz = $content = twatch_value('visitors','all');

Avoir donc l'affichage dans la même boîte de 3 variables différentes avec leur libellé associé (aujourd'hui, mois et total)
En tout cas un grand MERCI pour ton aide
Gérard
Bernard
avatar
from nearby-an-airport
Associate, 6927 posts

inspired from Hardboiled on Mar. 5 2007


Hardboiled: abracadabra fouchtra, et voilà

// titre de la boite
$title 'Visites';

// contenu
include $context['path_to_root'].'twatch_include/api.php';
twatch_connect();
$content 'Aujourd'hui :  '.twatch_value('visitors','today').BR
    .'
Ce mois-&#231;i :  '.twatch_value('visitors','this_month').BR
    
.'Total :  '.twatch_value('visitors','all');

// creer une boite complete
$box Skin::build_box($title$content'extra');

// inserer dans la zone extra
$context['extra'] .= $box;

Hardboiled
avatar
from le Web Parisien
175 posts

inspired from Bernard on Mar. 7 2007


Bernard : Encore MERCI
Cela marche
Gérard
Bernard
avatar
from nearby-an-airport
Associate, 6927 posts

inspired from Hardboiled on Mar. 7 2007


Hardboiled: J'ai vu, sur ton site, et c'est plutôt sympa. Ca donnerait envie de l'intégrer dans YACS, d'origine...

 
Share
Information channels
Recent files