Contao : Installer KCFinder

Ce tutoriel se base sur la version 2.9 de Contao.

Nous voilà partie dans un nouveau système de gestion de contenu nommé CONTAO (anciennement Typolight).

Pour ceux qui ne connaissent pas il s’agit d’un portail internet assez simple à utiliser, cependant il lui manque une partie importante concernant l’éditeur de texte tinyMCE : un explorateur de fichier.

À travers les lignes suivantes, je vais essayer de vous montrer comment intégrer ce super petit navigateur de fichier à tinyMCE.

Pour commencer téléchargez l’archive de KCFinder (kcfinder archive zip).

Il vous faut maintenant extraire le contenu de cette archive dans le répertoire : plugins/tinyMCE/plugins/kcfinder/

Le plus dur est fait, il ne nous reste plus qu’à configurer le tout.

Commençons dans l’ordre par KCFinder, dans le répertoire ouvrir le fichier « config.php » et modifier les lignes suivantes :

'uploadURL' => "upload",

par

'uploadURL' => "../../../../tl_files/",
'uploadDir' => "",

par

'uploadDir' => $_SERVER['DOCUMENT_ROOT']."/tl_files",

et enfin,

//'_tinyMCEPath' => "/tiny_mce",

par

'_tinyMCEPath' => "/plugins/tinyMCE/",

Les modification pour notre navigateur de fichier sont terminées, passons maintenant à la configuration de tinyMCE.

Trouvez les fichier : tinyMCE.php dans system/config et modifiez les lignes suivantes :

Ajoutez

file_browser_callback: 'openKCFinder',

après

tinyMCE.init({
mode : "exact",
height : "300",
language : "< ?php echo $this->language; ?>",
elements : "< ?php echo $this->rteFields; ?>",

et aussi

function openKCFinder(field_name, url, type, win) {
tinyMCE.activeEditor.windowManager.open({
file: 'plugins/tinyMCE/plugins/kcfinder/browse.php?opener=tinymce&amp;amp;amp;type=' + type + '&amp;amp;amp;dir=' + type + '/public',
title: 'KCFinder',
width: 700,
height: 500,
resizable: "yes",
inline: true,
close_previous: "no",
popup_css: false
}, {
window: win,
input: field_name
});
return false;
}

sous la fin de la fonction précédente.

Vous pouvez faire la même chose dans les fichiers : tinyFlash.php et tinyNews.php.

Vous verrez apparaître maintenant une icône sur le bord de vos fenêtres d’insertion de documents et vous obtiendrez ainsi un joli explorateur de fichiers.

Créer un web service avec Zend Framework

Pour commencer revenons un petit peu sur les web services. Qu’est ce que c’est ? À quoi ça sert ? Comment ça marche ?

À travers les lignes qui suivent je vais essayer de vous faire comprendre l’utilité de tout ça. Commençons avec une petite définition de ce terme, d’après Wikipedia :

Un service web est un programme informatique permettant la communication et l’échange de données entre applications et systèmes hétérogènes dans des environnements distribués. Il s’agit donc d’un ensemble de fonctionnalités exposées sur internet ou sur un intranet, par et pour des applications ou machines, sans intervention humaine, et en temps réel.

(Source http://fr.wikipedia.org/wiki/Service_Web)

En gros ça permet à des applications hétérogènes, il faut entendre par ce terme programmées dans plusieurs langages différents, de partager des informations en utilisant des protocoles en commun :

  • WSDL : c’est un fichier de description du WS écrit en XML
  • SOAP : un des protocoles permettant la communication entre 2 applications (il existe aussi par exemple le protocole REST)

Rentrons dans le vif du sujet, pour créer un WS, nous avons vu qu’il nous fallait un fichier appelé WSDL, il existe plusieurs façons de le faire, vous pouvez par exemple utiliser Zend Studio (Logiciel Payant), mais nous allons voir comment le faire encore plus simplement en utilisant Zend Framework.

(ce tutoriel est basé sur la version 1.9.7 de Zend Framework disponible sur le site de Zend)

Pour ce faire nous allons créer une classe PHP TestWS.php


< ?php

class TestWS{

}

?>

Pour le moment rien de compliqué, nous allons maintenant ajouter 2 méthodes à l’intérieur, une première qui devra nous renvoyer « Hello Word » et la seconde qui nous renverra le texte qu’on lui aura passé en paramètre.


< ?php

class TestWS{

public function getHello(){

return 'Hello Word';

}

public function getMyText($text){

return $text;

}

}

?>

Utilisons maintenant la PHPDoc pour commenter un peu notre code, c’est aussi grâce à la PHPDoc que ZF va pouvoir générer à notre place le fichier WSDL.


< ?php

class TestWS{

/**
* This function return the text 'Hello Word'
* @return string
*/
public function getHello(){

return 'Hello Word';

}

/**
* This function return the text in $text
* @param string $text
* @return string
*/
public function getMyText($text){

return $text;

}

}

?>

Maintenant il nous faut utiliser le Framework Zend, dans mon cas je l’utilise comme « Boîte à outils », je vais donc inclure les fichiers nécessaires à cette démonstration.


< ?php
ini_set("soap.wsdl_cache_enabled", "0");
require_once 'Zend/Soap/AutoDiscover.php';
require_once 'Zend/Soap/Server.php';

class TestWS{

/**
* This function return the text 'Hello Word'
* @return string
*/
public function getHello(){

return 'Hello Word';

}

/**
* This function return the text in $text
* @param string $text
* @return string
*/
public function getMyText($text){

return $text;

}

}

?>

Pour une question de pratique, je vais proposer mon WS directement sur ma classe, mais vous pouvez très bien les proposer à travers un autre fichier.

Nous allons maintenant créer « Le serveur de Web Service » pour rendre notre WS disponible, vous allez voir c’est assez simple.


< ?php
ini_set("soap.wsdl_cache_enabled", "0");
require_once 'Zend/Soap/AutoDiscover.php';
require_once 'Zend/Soap/Server.php';
require_once 'Zend/Soap/Client.php';

if(isset($_GET['wsdl'])) { // On aura accès à mon WS à l'adresse http://MonServeur/test.php?wsdl
$wsdl = new Zend_Soap_AutoDiscover();
$wsdl->setClass('TestWS'); // Il faut ajouter le nom de la classe
$wsdl->handle();
}else {
$server = new Zend_Soap_Server('http://MonServeur/test.php?wsdl');
$server->setClass('TestWS');
$server->handle();
}

class TestWS{

/**
* This function return the text 'Hello Word'
* @return string
*/
public function getHello(){

return 'Hello Word';

}

/**
* This function return the text in $text
* @param string $text
* @return string
*/
public function getMyText($text){

return $text;

}

}

?>

Si nous nous rendons à l’adresse http://MonServeur/TestWs.php?wsdl, nous pourrons visualiser notre Web Service.

Notre Web Service est maintenant en place, il ne nous reste plus qu’à le consommer (l’utiliser), nous allons donc créer un fichier client.php et inclure les librairies de ZF dont nous avons besoin.


< ?php
require_once 'Zend/Soap/Client.php';

try {
$client = new Zend_Soap_Client('http://MonServeur/TestWS.php?wsdl');

}
catch(Zend_Exception $e) {
echo $e->getMessage();
}

?>

Nous avons maintenant notre code de base pour consommer notre WS, nous pouvons par exemple demander la liste complète des fonctions disponibles via ce web service avec la fonction suivante ;


$client->getFunctions();

et on aura la réponse suivante :

Array
(
[0] => string getHello()
[1] => string getMyText(string $text)
)

Appelons maintenant nos fonctions.


< ?php
ini_set("soap.wsdl_cache_enabled", "0");
require_once 'Zend/Soap/Client.php';

try {
$client = new Zend_Soap_Client('http://MonServeur/TestWS.php?wsdl');
print($client->getHello());
print('<br />');
print($client->getMyText('Je veux mon texte'));
}
catch(Zend_Exception $e) {
echo $e->getMessage();
}

?>

et nous aurons la réponse suivante :


Hello Word
Je veux mon texte

J’espère que ces lignes vous aideront, à très vite pour de nouveaux tutoriels.

A venir prochainement

Histoire de mettre quelques infos sur ce blog, je suis en train de vous préparer une série de tutoriaux sur PHP et Zend Framework :

  • Création d’un mini-cms
  • Création et utilisation de webservices