PDA

Voir la version complète : Appel Au Codeur Php


bubka
03/03/2004, 10h04
Bonjour à tous :-)

Voila, je voudrais faire une petite modif sur un des blocs de la page d'acceuil du site, a savoir le bloc "articles recents" présent sur le coté droit, bloc qui liste les titres des 10 dernieres news du site. J'ai donc besoin d'un coup de main de la part des membres sachant coder en php :-D

Le bloc en l'état actuel ne me convient pas tout à fait, je voudrais que le titre des articles du jour soit dans une couleur differentes que celle pour les articles passés, de sorte que les news recentes "sautent au yeux".

Voici le code du bloc :

<ul>
<{foreach item=news from=$block.stories}>
<img src="http://customxp.net/modules/ipboard/style_images/xoops-theme/icon0.gif" hspace="2" ><a href="<{$xoops_url}>/modules/news/article.php?storyid=<{$news.id}>"><{$news.title}></a><br>
<{/foreach}>
</ul>

et voici la variable qui définie la date de l'article :

<{$news.date}>

Mes très légère connaissances en php et programmation en general me font dire que le moyen le plus simple est d'integrer une comparaison via un "if" au sein de la boucle, ou la date de l'article serait comparé à la date du jour, suivit en fonction du résultat d'un chagement de code couleur de la font.

Construire la condition, ca je saurais faire à la limite. Ce qui je ne connais pas, ce sont les varaibles standard de date utilisés par php/mysql, évidement nécessaires dans le cas présent, et également la commande pour changer la couleur de font.

Donc si qqu'un sait comment faire ou aurait ne serait qu'une piste ou une info relative, je suis preneur.

Merci d'avance à tout ceux qui pourront nous aider :jap:

Bricomix
03/03/2004, 11h36
Spa du PHP ça ? C'est un truc interieur à xoops non ?

Désolé mais on dirait pas du tout du PHP ;-) Mais si je suis à côté de la plaque qu'on me le dise :yes:

bubka
03/03/2004, 11h43
arf, c'est vrai, autant pour moi.
C'est du code html mais qui integre du php/mysql. Enfin pour moi foreach ... from, /foreach c'est du php nan ?

Je vais essayé de retrouver le code php complet du bloc, vu que ca ce n'est que la partie integration html qui permet de créer la liste des entrées.

Bricomix
03/03/2004, 11h47
OK merci pendant un moment j'ai douté des mes connaissances :he:

Mais le foreach existe en PHP, seulement ce n'est pas du tout la même chose ;-)

Guest
03/03/2004, 11h51
Lol, moi aussi j'ai eu peur car mes connaissances sont pas extraordinaire
MDR

bubka
03/03/2004, 11h56
Bon, voila le code php qui permet d'extraire de la bdd les entrées listées dans le bloc :

function b_news_top_show($options) {
global $xoopsDB;
$myts =& MyTextSanitizer::getInstance();
$block = array();
$sql = "SELECT storyid, title, published, expired, counter FROM ".$xoopsDB->prefix("stories")." WHERE published < ".time()." AND published > 0 AND (expired = 0 OR expired > ".time().") ORDER BY ".$options[0]." DESC";
$result = $xoopsDB->query($sql,$options[1],0);
while ( $myrow = $xoopsDB->fetchArray($result) ) {
$news = array();
$title = $myts->makeTboxData4Show($myrow["title"]);
if ( !XOOPS_USE_MULTIBYTES ) {
if (strlen($myrow['title']) >= $options[2]) {
$title = $myts->makeTboxData4Show(substr($myrow['title'],0,($opti ons[2] -1)))."...";
}
}
$news['title'] = $title;
$news['id'] = $myrow['storyid'];
if ( $options[0] == "published" ) {
$news['date'] = formatTimestamp($myrow['published'],"s");
} elseif ( $options[0] == "counter" ) {
$news['hits'] = $myrow['counter'];
}
$block['stories'][] = $news;
}
return $block;

Maintenant, par rapport à ce que tu me dis, la boucle foreach ne serait pas du php... bah quoi c'est alors ? :he:

bon, je vais manger, je vous laisse regarder le code si le coeur vous en dis. :-)

Bricomix
03/03/2004, 12h04
Sisi, foreach existe en PHP :yes:


function b_news_top_show($options) {
global $xoopsDB;
$myts =& MyTextSanitizer::getInstance();
$block = array();
$sql = "SELECT storyid, title, published, expired, counter FROM ".$xoopsDB->prefix("stories")." WHERE published < ".time()." AND published > 0 AND (expired = 0 OR expired > ".time().") ORDER BY ".$options[0]." DESC";
$result = $xoopsDB->query($sql,$options[1],0);
while ( $myrow = $xoopsDB->fetchArray($result) ) {
$news = array();
$title = $myts->makeTboxData4Show($myrow["title"]);
if ( !XOOPS_USE_MULTIBYTES ) {
if (strlen($myrow['title']) >= $options[2]) {
$title = $myts->makeTboxData4Show(substr($myrow['title'],0,($opti ons[2] -1)))."...";
}
}
$news['title'] = $title;
$news['id'] = $myrow['storyid'];
if ( $options[0] == "published" ) {
if (date('Y-m-d', $myrow['published']) == date('Y-m-d')) $news['date'] = '<span style="color: red">'.formatTimestamp($myrow['published'],"s").'</span>'; else $news['date'] = formatTimestamp($myrow['published'],"s");
} elseif ( $options[0] == "counter" ) {
$news['hits'] = $myrow['counter'];
}
$block['stories'][] = $news;
}
return $block;


Je ne suis pas sûr de mon code mais bon tu peux toujours essayer ;-)

Bricomix
03/03/2004, 12h25
Tiens un autre code, le précédent affiche les news en rouge du jour même, mais celui-ci affiche en rouge les news du même jour que la news la plus récente ;-)


function b_news_top_show($options) {
global $xoopsDB;
$myts =& MyTextSanitizer::getInstance();
$block = array();
$sql = "SELECT storyid, title, published, expired, counter FROM ".$xoopsDB->prefix("stories")." WHERE published < ".time()." AND published > 0 AND (expired = 0 OR expired > ".time().") ORDER BY ".$options[0]." DESC";
$result = $xoopsDB->query($sql,$options[1],0);
$actdate = mysql_result($result, 0, 'published');
while ( $myrow = $xoopsDB->fetchArray($result) ) {
$news = array();
$title = $myts->makeTboxData4Show($myrow["title"]);
if ( !XOOPS_USE_MULTIBYTES ) {
if (strlen($myrow['title']) >= $options[2]) {
$title = $myts->makeTboxData4Show(substr($myrow['title'],0,($opti ons[2] -1)))."...";
}
}
$news['title'] = $title;
$news['id'] = $myrow['storyid'];
if ( $options[0] == "published" ) {
if (date('Y-m-d', $myrow['published']) == date('Y-m-d', $actdate)) $news['date'] = '<span style="color: red">'.formatTimestamp($myrow['published'],"s").'</span>'; else $news['date'] = formatTimestamp($myrow['published'],"s");
} elseif ( $options[0] == "counter" ) {
$news['hits'] = $myrow['counter'];
}
$block['stories'][] = $news;
}
return $block;


Encore un fois je suis pas sûr de mon code je l'ai pas testé :yes:

bubka
03/03/2004, 13h11
je vais faire des tests de suite :super:

bubka
03/03/2004, 13h28
a marche po, et je pense voir pourquoi.
La mise en forme de la police, tu l'as faite sur :


formatTimestamp($myrow['published']


Alors qu'a priori la variable retournée pour afficher le titre de la news, c'est $news['title'].

Apres, dans la condition, et par rapport a ce qu'il y avait avant modif, tu as supprimé ceci :

if ( $options[0] == "published" )

pour mettre ceci :

if (date('Y-m-d', $myrow['published']) == date('Y-m-d')) $news['date'] = '<span style="color: red">'.formatTimestamp($myrow['published'],"s").'</span>';

C'est normal ? L'est passé ou la comparaison entre $options[0] et "published" ? :-D

Bricomix
03/03/2004, 13h36
Oui en effet je l'ai fait sur date LOL voici les nouveaux scripts :


function b_news_top_show($options) {
global $xoopsDB;
$myts =& MyTextSanitizer::getInstance();
$block = array();
$sql = "SELECT storyid, title, published, expired, counter FROM ".$xoopsDB->prefix("stories")." WHERE published < ".time()." AND published > 0 AND (expired = 0 OR expired > ".time().") ORDER BY ".$options[0]." DESC";
$result = $xoopsDB->query($sql,$options[1],0);
while ( $myrow = $xoopsDB->fetchArray($result) ) {
$news = array();
$title = $myts->makeTboxData4Show($myrow["title"]);
if ( !XOOPS_USE_MULTIBYTES ) {
if (strlen($myrow['title']) >= $options[2]) {
$title = $myts->makeTboxData4Show(substr($myrow['title'],0,($opti ons[2] -1)))."...";
}
}
if (date('Y-m-d', $myrow['published']) == date('Y-m-d')) {
$news['title'] = '<font color="#BB0000">'.$title.'</font>';
} else {
$news['title'] = $title;
}
$news['id'] = $myrow['storyid'];
if ( $options[0] == "published" ) {
$news['date'] = formatTimestamp($myrow['published'],"s");
} elseif ( $options[0] == "counter" ) {
$news['hits'] = $myrow['counter'];
}
$block['stories'][] = $news;
}
return $block;


Le second ;-)


function b_news_top_show($options) {
global $xoopsDB;
$myts =& MyTextSanitizer::getInstance();
$block = array();
$sql = "SELECT storyid, title, published, expired, counter FROM ".$xoopsDB->prefix("stories")." WHERE published < ".time()." AND published > 0 AND (expired = 0 OR expired > ".time().") ORDER BY ".$options[0]." DESC";
$result = $xoopsDB->query($sql,$options[1],0);
$actdate = mysql_result($result, 0, 'published');
while ( $myrow = $xoopsDB->fetchArray($result) ) {
$news = array();
$title = $myts->makeTboxData4Show($myrow["title"]);
if ( !XOOPS_USE_MULTIBYTES ) {
if (strlen($myrow['title']) >= $options[2]) {
$title = $myts->makeTboxData4Show(substr($myrow['title'],0,($opti ons[2] -1)))."...";
}
}
if (date('Y-m-d', $myrow['published']) == date('Y-m-d', $actdate)) {
$news['title'] = '<font color="#BB0000">'.$title.'</font>';
} else {
$news['title'] = $title;
}
$news['id'] = $myrow['storyid'];
if ( $options[0] == "published" ) {
$news['date'] = formatTimestamp($myrow['published'],"s");
} elseif ( $options[0] == "counter" ) {
$news['hits'] = $myrow['counter'];
}
$block['stories'][] = $news;
}
return $block;


EDIT : encore une fois je suis pas sûr du tout j'ai pas xoops et je peux donc pas être sûr de ce que je fais ;-)

bubka
03/03/2004, 13h48
Alors, second coup, le code est valide ( j'ai bien le bloc d'affiché ).
Par contre il semblerai que la mise en forme saute, et je pense que c'est à cause de la feuille de style xoops, bien que si je ne dis pas de betise, <span> est censé l'annulé nan ?

Bricomix
03/03/2004, 13h52
Ah oui ça spa con :-D En fait tu peux essayer d'utiliser <font color="#FF0000">blabla</font> si tu n'a pas peur d'avoir une page complètement pas valide HTML ou bien me donner la feuille de style pour que je vois ça ;-)

bubka
03/03/2004, 13h57
c bon arrete tout, j'ai trouvé :glass:

J'ai viré la balise span pour une balise font et ca roule :yes:

Merci bcp Bricomix :jap:

Je m'en vais de ce pas mettre en place sur cxp

bubka
03/03/2004, 13h58
arf, j'avais pas vu ton dernier post. Bon, au moin on a bon tous les deux :-D

Pour le w3c compliant, amuse toi a faire le test pour cxp, tu vas avoir peur. Donc je suis plus a une balise pret :he:

Bricomix
03/03/2004, 14h01
Ok bon ben lol ça va :-D

Je vais de ce pas faire le test :siffle:

EDIT : tu mets lequel de script ? Celui qui affiche en rouge les news du jour même ou les news postées le même jour que la news la plus récente ?

bubka
03/03/2004, 14h04
celui pour les news du jour, le premier donc.
C'est en place la. Le rouge est un peu flashy, faut que je trouve la bonne couleur mais c'est nickel, tout comme je voulais :yes:

:jap:

Bricomix
03/03/2004, 14h05
Ah oki je viens de faire le test ;-)

Tu as raison font ou pas le personne ne réussira à voir le changement :-D

bubka
03/03/2004, 14h05
pour le test, je crois qu'il y a + de 1500 erreurs :he:

Bricomix
03/03/2004, 14h15
Bah c'est vrai que faut un rouge moins agressif :yes: Peut-être du genre #BB0000 non ?

Bricomix
03/03/2004, 14h20
Tiens d'ailleurs si tu remplacait $news['title'] = "<font color=red>$title</font>"; par $news['title'] = "<font color=\"red\">$title</font>"; ça ferait toujours une erreur de moins, vu qu'en xhtml il faut des guillemets ;-)

bubka
03/03/2004, 14h28
le #BB0000 est efectivmeent plus agreable a l'oeil. Je ferai qques test choix moi paskeu la au taff, j'ai que paint :he:

Sinon pour la correction du code, t'en fais pas, xoops n'est meme pas au standard. AU passage, je te met le code exact que j'ai mis paske spa tout à fait le dernier que tu ai posté :

if (date('Y-m-d', $myrow['published']) == date('Y-m-d')) {
$news['title'] = "<font color=#BB0000>".$title."</font>";
} else {
$news['title'] = $title;
}


En gros, j'ai mis des "." entre les balises de mise en forme. Tu noteras également que la balise font n'a pas de "" pour le code couleur. C'est xoops qui me jete quand je les lui met :arf:

Bricomix
03/03/2004, 14h35
Peut-être qu'avec des simples quotes les guillemets passeront mieux : $news['title'] = '<font color="#BB0000">'.$title.'</font>';

bubka
03/03/2004, 14h42
peut etre bien, peut etre pas. Je t'avoue que j'ai pas vraiment envie de me prendre la tete avec ca :-D

L'important pour moi c'st que ca marche, apres la forme, je corrige si j'ai le temps. Et la en l'occurence j'ai pas le temps, je dois filer chez un client.

Bon, bah merci encore. Bonne apres midi :hello:

Bricomix
03/03/2004, 17h25
De rien et bonne après midi toi aussi ;-)

kenzo
03/03/2004, 18h38
Salut les pro php,
Je debute en php, je suis la pour poser une question, plus tot pour qu'une reponse :gne:
Quelqu'un pourriez m' expliquer comment on peut faire le text qui deroule dans la rubrique "telechagements" ou "lien", SVP?
:merci: d'avance

Bricomix
03/03/2004, 19h08
Euh... précise STP parceque là je comprends pas bien ;-)

kenzo
03/03/2004, 22h31
Originally posted by Bricomix@03 Mar 2004 19:08
Euh... précise STP parceque là je comprends pas bien ;-)
Euh, g peut etre mal explique, voila en image ce ke, je veux faire

Bricomix
03/03/2004, 23h58
C'est en javascript, y'a pleins de scripts pour ça ;)

En php spa possible vu que php s'execute coté serveur :yes:

Bricomix
04/03/2004, 10h06
Tu peux utiliser la balise marquee (ce que CXP fait) mais ce n'est pas conseillé si c'est pour une page valide HTML étant donné que cette balise ne fait par partie des standards ;-)

Sinon il existe pleins de scripts tout fait Google est ton ami :yes:

Invité_kenzo
04/03/2004, 15h38
merci, bric...
ca va me servir beaucoup