Comme tout le monde a pu le voir, ce n'est guère évident de trouver le temps pour rédiger des news mais..
Ca y'est, l'année 2011 a commencé, l'occasion rêvée pour faire un 1er bilan après plus de 3 années intensives consacrées au développement Web au côté de SillySmart et dorénavant de Wandi.
La 1ère année de Wandi a été très riche avec la réalisation de plus d'une trentaine de sites.
Un grand merci à tous ceux qui nous font confiance et qui permettent de faire progresser l'aventure Wandi et SillySmart chaque jour.
Sans oublier tous ceux qui nous accompagnent au quotidien : les Wandiz, Charly, Jerem, Mickey, Chatton, les Nsn guys et tous les autres..
Bonne année à tous !
Lorsque vous affichez des images dynamiquement, si vous voulez vous assurez qu'elles existent réellement, vous pouvez le faire assez aisément directement en XSL :
<!--
- Apply css with XSL
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="root">
<html>
<head></head>
<body>
<!-- On suppose que le noeud 'id' contient une partie du nom du fichier -->
<xsl:variable name="imgSrc" select="boolean(document(string(concat('http://www.sillysmart.org/img/users/', id, '.jpg'))))" />
<xsl:choose>
<xsl:when test="$imgSrc">
<img src="{concat('http://www.sillysmart.org/img/users/', id, '.jpg')}" alt="{id}" />
</xsl:when>
<xsl:otherwise>
<img src="http://www.sillysmart.org/img/404.jpg" alt="Not found" />
</xsl:otherwise>
</xsl:choose>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Supposons le flux XML suivant listant un ensemble d'utilisateurs :
<?xml version="1.0" encoding="UTF-8"?> <users> <user> <id>1</id> <login>lo</login> <email>laurent@sillysmart.org</email> </user> <user> <id>2</id> <login>flo</login> <email>florian@sillysmart.org</email> </user> <user> <id>3</id> <login>charly</login> <email>charly@sillysmart.org</email> </user> </users>
Le css suivant :
table.bo_table_visible {
border:1px solid #000;
border-spacing: 0px;
margin-top:10px;
margin-bottom:10px;
}
table.bo_table_visible tr.summary th {
background:#2E2D2D;
color:#E45A49;
}
table.bo_table_visible tr td, table.bo_table_visible tr th {
padding:0 10px;
}
table.bo_table_visible tr.even td {
background-color:#FFF;
color:#000;
}
table.bo_table_visible tr.even:hover td {
background-color:#FF8ABC;
color:#FFF;
}
table.bo_table_visible tr.odd td {
background-color:#DFDFDF;
color:#000;
}
table.bo_table_visible tr.odd:hover td {
background-color:#64B8FE;
color:#FFF;
}
Il vous suffit d'appliquer le script XSL suivant pour appliquer les styles sur votre liste d'utilisateurs :
<!--
- Apply css with XSL
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="root">
<html>
<head></head>
<body>
<table class="bo_table_visible">
<tr>
<th>Id</th>
<th>Login</th>
<th>Email</th>
</tr>
<xsl:for-each select="//users/user">
<xsl:variable name="cssClass">
<xsl:choose>
<xsl:when test="(position() mod 2) = 0">
even
</xsl:when>
<xsl:otherwise>
odd
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<tr class="{$cssClass}">
<td><xsl:value-of select="id" /></td>
<td><xsl:value-of select="login" /></td>
<td><xsl:value-of select="email" /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Ce qui produira :
| Id | Login | |
|---|---|---|
| 1 | lo | laurent@sillysmart.org |
| 2 | flo | florian@sillysmart.org |
| 3 | charly | charly@sillysmart.org |
Si vous souhaitez en MySQL (ou en PHP) récupérer les commentaires de tables et/ou les commentaires des colonnes d'une table, sachez qu'il est très facile d'accéder à ces informations directement à partir d'une requête.
Récupérer les commentaires d'une table :
# 'sillysmart' est le nom de la base de données dont vous voulez extraire des informations mysql> SHOW TABLE STATUS FROM sillysmart mysql>
produira les informations suivantes:
| Name | Engine | Version | Rows | Comment |
|---|---|---|---|---|
| Country | MyISAM | 10 | 240 | Countries Listing |
| News | MyISAM | 10 | 30 | News Listing |
où la colonne 'Comment' vous donnera l'information voulue, à savoir le commentaire de la table. Sachez que beaucoup d'autres informations sont accessibles grâce à cette requête.
Récupérer les commentaires des colonnes d'une table :
# 'Country' est le nom de la table voulue mysql> SHOW FULL COLUMNS FROM Country mysql>
produira les informations suivantes:
| Field | Type | Collation | Null | Key | Extra | Privileges | Comment |
|---|---|---|---|---|---|---|---|
| country_id | bigint(20) | NULL | NO | PRI | auto_increment | select,insert,update | Id |
| country_name | varchar(255) | latin1_swedish_ci | NO | UNI | select,insert,update | Country Name | |
| country_tld | varchar(2) | latin1_swedish_ci | YES | select,insert,update | Country TLD |
où la colonne 'Comment' vous donnera l'information voulue, à savoir le commentaire de la colonne de la table.
Libre à vous d'exploiter ces informations en PHP. Personnellement nous utilisons ces colonnes de manière transparente sur SillySmart pour créer des back-office génériques qui reste néanmoins parlant pour un non-informaticien. La seule contrainte est que la longueur du commentaire est bridée à 60 caractères, donc soyez succinct !
Si vous voulez pousser le générique assez loin avec PHP et que vous en arrivez à vouloir accéder à des variables PHP sans connaitre leur nom, sachez que c'est possible assez simplement sans passer par des fonctions eval() ou autre code illisible.
En effet, la flexibilité de php permet de "générer" des noms de variables grâce aux caractères {} ; un petit exemple, supposons une classe représentant un modèle (ici une news), volontairement simplifiée.
<?php
class News
{
private $news_title;
private $news_description;
public function __construct($_news_title,$news_description)
{
$this->news_title = $_news_title;
$this->news_description = $news_description;
}
public function __get($name)
{
return $this->{$name};
}
}
?>
Grâce au getter générique __get(), nous pouvons accéder à des variables de classe sans connaître leur nom. Imaginons, dans un autre fichier qu'une variable contienne la string décrivant la variable de classe, nous pouvons en récupérer la valeur d'une manière abstraite comme ceci :
<?php
include("News.class.php");
$news = new News("titre","contenu");
$generic = "news_title";
var_dump($news->__get($generic));
// Ce qui affichera "String(7) contenu";
?>