Tag Archives

2 Articles

Phing : PHing Is Not GNU make

by Throrïn 0 Comments

Au travail, j’ai découvert une extension PEAR pour PHP vraiment utile. Il s’agit de Phing (PHing Is Not GNU make). Phing est un projet servant à construire des projets ou à effectuer différentes étapes de façon automatique.

Pour résumer, C/C++ a son make, Linux a ses scripts bash, Windows a ses batch et PHP a Phing. Phing utilise le langage XML pour formater les scripts.

Je l’ai trouvé simple à prendre en main (en regardant la doc). Il intègre des solutions FTP, SQL (avec PDO), commandes systèmes et les règles de programmation de base (if, …). Pour vous donner une petite idée des performances de Phing, j’ai dû créer aujourd’hui un script permettant la création d’un SVN repository avec, la création sur le serveur ftp du dossier du projet (pour le site web) et pour finir à créer l’utilisateur et la base de données rattachée sur un autre serveur MySQL.

Je pense que j’aurais pu faire l’équivalent en scripts bash sur mon serveur Ubuntu mais on m’a demandé de l’effectuer avec ce langage. Des améliorations de ce script m’ont été demandées donc je vais bien voir ce qu’il est vraiment possible.

Voici justement un petit aperçu de script Phing (fournit dans le quickstart de la documentation).

<?xml version="1.0" encoding="UTF-8"?>
<project name="FooBar" default="dist">
    <!-- ============================================  -->   
    <!-- Target: prepare                               -->
    <!-- ============================================  -->
    <target name="prepare">
        <echo msg="Making directory ./build" />
        <mkdir dir="./build" />
    </target>



    <!-- ============================================  -->
    <!-- Target: build                                 -->
    <!-- ============================================  -->
    <target name="build" depends="prepare">
        <echo msg="Copying files to build directory..." />
        <echo msg="Copying ./about.php to ./build directory..." />
        <copy file="./about.php" tofile="./build/about.php" />
        <echo msg="Copying ./browsers.php to ./build directory..." />
        <copy file="./browsers.php" tofile="./build/browsers.php" />
        <echo msg="Copying ./contact.php to ./build directory..." />
        <copy file="./contact.php" tofile="./build/contact.php" />
    </target>



    <!-- ============================================  -->
    <!-- (DEFAULT)  Target: dist                       --> 
    <!-- ============================================  -->
    <target name="dist" depends="build">
        <echo msg="Creating archive..." />
        <tar destfile="./build/build.tar.gz" compression="gzip">
            <fileset dir="./build">
                <include name="*" />
            </fileset>
        </tar>
        <echo msg="Files copied and compressed in build directory OK!" />
    </target>
</project>

Et pour plus d’infos, je vous invite à aller sur leur site.

Créer un sitemap

Créer un sitemap

Après JQuery, je vais vous parler d’une chose importante pour un site, le Sitemap.

Comme vous le savez, les moteurs de recherche regardent votre sitemap pour pouvoir indexer toutes les pages présentes dessus.

Le problème qui se pose avec des pages en php, asp, jsp, c’est que notre site est dynamique. Pour chaque article sur notre blog, produit sur notre site d’e-commerce, de messages sur notre forum, ça nous rajoute 1 page. Assez embêtant à mettre à jour quand on rentre 20 nouveaux produits.

L’une des méthodes consiste à générer notre fichier quand on enregistre notre produit en base de données. Mais elle est assez lourde à mettre en place et enregistre un fichier sur le serveur.

La seconde, et sans doute la meilleure, est de redirigé le sitemap sur une page php, qui va nous lister le lien de chaque produit, tout en faisant croire que l’on est sur une page XML.

Nous allons donc voir comment créer un sitemap dynamique en utilisant Zend.

Vous devez d’abord savoir comment utiliser les classes Zend_Table_Abstract pour pouvoir parcourir la liste de vos produits.

Tout d’abord voici le contrôleur :
/**
* Classe servant à générer dynamiquement le sitemap.
*
* @version 0.1
* @author Throrin
* @package Sitemap
*
*/
class SitemapController extends Zend_Controller_Action
{
public function indexAction()
{
$this->_helper->layout()->disableLayout();

//on commence par récupérer tous les produits
$tableproduit = new TProduit();
$listeproduits = $tableproduit->fetchAll('ispublie=1');
//on dit que la vue est interprétée comme un type xml en changeant le header
$this->getResponse()->setHeader('Content-Type', 'text/xml; charset=UTF-8');

//on intègre la liste à la vue
$this->view->listeproduits = $listeproduits;
}
}

Je vais vous commenter chaque ligne avant de passer à la vue.

On commence donc en premier lieux à dire qu’on désactive le layout du site (si on en a un). Ensuite, on initialise notre table produit. De là, je lui dis de récupérer tous mes produits qui sont publiés.

Pour finir, je change le header de ma page afin de faire croire au navigateur que ma vue sera en XML et non en php.

Ensuite, on s’attaque à la vue qui ressemblera à ceci:
'."\n"; ?>



http://caratamp.fr


http://caratamp.fr/galerie


http://caratamp.fr/index/infoetlib


http://caratamp.fr/index/condgene


http://caratamp.fr/index/contact


http://caratamp.fr/galerie/rechercherapide


http://caratamp.fr/auth/login/

listeproduits as $unproduit)
{
?>

idProduit . '/Nom/' . $this->dellAccent($unproduit->Nom). '/Reference/' . $this->dellAccent($unproduit->Reference); ?>




Comme on peut le voir, on commence par donner l’en-tête, ensuite on donne les pages statiques et on finit par une boucle permettant de générer un lien par produit.

Maintenant que cette partie est faite, il faut pouvoir faire la redirection. Pour se faire, il faut toucher au fichier .htacces de Zend puis au bootstrap.

Dans le .htaccess, vous devez faire ce qui suit afin de faire pointer les robots (google, yahoo, …) vers un faux sitemap.xml qui lui, ramènera vers votre contrôleur Sitemap:
RewriteRule ^(.*)sitemap.xml$ /sitemap/index [L]
Pour le bootstrap, on va rajouter une autre réécriture de lien grâce à la classe Zend_Route. Par contre, l’exemple illustré dessous était pour Zend 1.7. Le passage vers la 1.8 ne devrait pas poser de problèmes. Quand je l’aurais fait, je modifierai l’article pour vous donner ma solution.
$router = $frontController->getRouter();
$router->addRoute(
'manageSitemap',
new Zend_Controller_Router_Route('sitemap.xml', array('controller'=>'sitemap','action'=>'index'))
);

Comme on peut le voir, notre route est toute simple, on dit que quand on cherche sitemap.xml, on est redirigé vers notre contrôleur.

Voilà, j’espère avoir pu vous aider sur ce sujet. Si vous avez des questions n’hésitez pas.