More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  Blog d'un Développeur TY...ProfileFriendsBlogMore Tools Explore the Spaces community

Blog d'un Développeur TYPO3

TYPO3 : une T3Uni en 2009 ?
August 19

Problème de subpart dans TYPO3 Commerce

Il y a un petit problème de marqueur dans un template livré par défaut avec l'extension tx_commerce (présentation de l'extension tx_commerce). Quand on souhaite afficher une vue de type sous catégories et produits, on utilise le marqueur ###CATEGORY_ITEM_PRODUCTLIST###. Le hic, c'est qu'il faudrait plutôt utiliser un subpart si l'on se réfère à la librairie class.tx_commerce_pibase.php.

$tmpCategory=$this->cObj->substituteSubpart($tmpCategory,'###CATEGORY_ITEM_PRODUCTLIST###',$productList);

Bref, dans category_product.tpl (pi1), je vous recommande de remplacer ###CATEGORY_ITEM_PRODUCTLIST###

par

<!-- ###CATEGORY_ITEM_PRODUCTLIST### begin -->
<!-- ###CATEGORY_ITEM_PRODUCTLIST### end -->

N'oubliez pas non plus d'activer la configuration en typoscript avec les lignes suivantes :

plugin.tx_commerce_pi1 {
    groupProductsByCategory = 1
     hideProductsInList = 0
}

PS : ce bug traine depuis un bon moment
August 14

Empêcher la mise à jour des extensions TYPO3

Ce sera possible en effet, en ne passant plus par la ligne de commande pour modifier les droits sur les répertoires d'une extension. Un patch a été développé pour l'occasion par Steffen Kamper (voir le rapport de bug). Le patch modifie une classe de l'Extension Manager et ajoute un état "Writeprotected" (protection en écriture). Si l'état d'une extension est en "write_protected", la mise à jour sera impossible (bloquée mais pas vraiment de protection contre l'écriture).

August 01

Nouveau système de cache pour TYPO3 ?

Ingo Renner, Développeur sur le Core de TYPO3 et Responsable du planning de la sortie de la version 4.2 à posté un message intéressant ce jour : http://bugs.typo3.org/view.php?id=9097
Selon Ingo, TYPO3 utilise différents systèmes de cache, implémentés différement, ce qui complique les choses lorsque l'on souhaite faire de la maintenance, retoucher le code...
FLOW3 offrirait un cache optimisé, ce qui unifierait la gestion du cache dans TYPO3. Ce cache dans FLOW3 est plus facile à utiliser parait-il. C'est la raison pour laquelle il est "back-porté" pour les versions de TYPO3 4.3.x.
Un exemple est attaché au lien ci-dessus qui mène directement au bugtracker de TYPO.

Petite remarque : il s'agit d'une extension encore en version alpha. J'ai testé cette extension et ça me semble plutôt sympa, à vue d'oeil... Il faudrait faire des tests sur des sites contenant plusieurs milliers de pages pour se faire une idée et calculer les temps d'affichage :) Il s'agirait également d'un "framework", donc, des méthodes à implémenter.

July 30

API Magento pour TYPO3

Magento est une solution E-commerce fonctionnant sous PHP qui fait beaucoup parler d'elle en ce moment, surtout depuis la dernière version en date, la v 1.1 sortie le 25 juillet 2008. En effet, cette mise à jour était attendue et elle apporte notamment un gain appréciable au niveau des performances de l'application, des nouveaux produits, ... et le support des webservices.

De l'autre coté, TYPO3, un très bon CMS :) C'est sans doute cette gestion des Webservices qui a donné l'idée à Goerg Ringer de développer une API pour faire communiquer TYPO3 et Magento, un peu comme on le ferait avec Google Maps, par exemple.

Le projet est consultable sur Magentocommerce. Concernant le stade actuel de l'extension, il est possible de récupérer sous forme de tableau (array) les informations provenant de Magento sur tel ou tel produit. Pour ce faire, il suffit d'installer l'extension, de renseigner la boutique Magento, de donner les accès (identifiant/mot de passe) et de déposer un plugin sur une page de TYPO3.

L'affichage est paramétrable depuis un template HTML (exemple) composé de marqueurs et le plugin est de type USER.

Voici un exemple coté typoscript :

lib.singleProduct < plugin.tx_magento_pi1
lib.singleProduct.mode = SINGLEPRODUCT
lib.singleProduct.sku = 123456

ou bien

lib.productList < plugin_tx_magento_pi1
lib.productList.mode = PRODUCTS
lib.productList.where = 1234%
lib.productList.whereField = sku

Ce projet est soutenu par plusieurs développeurs et est déjà disponible sur TYPO3 Forge.

API Magento pour TYPO3

July 02

De l'Ajax dans une extension TYPO3

L'Ajax est très utilisé de nos jours... enfin, cette utilisation est plus ou moins réussie en fonction des projets. Trop d'Ajax tue parfois l'Ajax. Bref, avec TYPO3, il existe plusieurs solutions. Je vais néanmoins vous en présenter une : il s'agit de xajax. L'avantage de la bibliothèque xajax par rapport à ses concurrentes (prototype ou JSQuery par exemple), c'est qu'elle est très simple d'utilisation et ne nécessite donc pas de connaissances particulières.

Son utilisation dans un plugin frontend est relativement aisée, pourvu que l'on ne recharge pas la page :)

1. Tout d'abord, vous devez passer par le quickstarter dans TYPO3 pour créer un début d'extension. Ensuite, vous devez déclarer votre plugin comme étant de type USER_INT. Si vous déposez ce plugin sur une page, seul celui-ci ne sera pas mis en cache.

Vous pouvez déclarer votre plugin comme ceci :
plugin.tx_monplugin_pi1 = USER_INT

2. Ensuite, vous devez inclure la classe xajax dans votre pi1 :

/* Include xaJax */       
require_once (t3lib_extMgm::extPath('xajax') . 'class.tx_xajax.php');

L'initialisation de l'objet xajax se poursuit. N'oubliez pas de déclarer la variable xajax dans votre classe !

Dans class tx_monplugin_pi1 extends tslib_pibase {

...

/* xajax */
var $xajax;

3. Vous pouvez créer ensuite une fonction d'initialisation que vous appelerez dans votre méthode main()

function initList() {

        //$this->conf = $conf;
       
        // Instanciation de l'objet ajax
        $this->xajax = t3lib_div::makeInstance('tx_xajax');
       
        // Appel à une fonction pour décoder les données
        $this->xajax->decodeUTF8InputOn();
       
        // Encodage de la réponse au format UTF-8
        $this->xajax->setCharEncoding('utf-8');
       
        // Pour éviter les conflits avec l'extension, on rajoute un prefix supplémentaire
        $this->xajax->setWrapperPrefix($this->prefixId);
       
        // Affichage des messages dans la barre de statut
        $this->xajax->statusMessagesOn();
       
        // Mode debug
        $this->xajax->debugOff();
       
        // Nom des fonctions PHP pour le traitement des données (très important)
        $this->xajax->registerFunction(array('processFormData', &$this, 'processFormData'));
       
        // If this is an xajax request call our registered function, send output and exit
        $this->xajax->processRequests();
       
        // Else create javacript and add it to the normal output
        $GLOBALS['TSFE']->additionalHeaderData[$this->prefixId] =              $this->xajax->getJavascript(t3lib_extMgm::siteRelPath('xajax'));

}

4. Vous devez ensuite créer un formulaire en frontend et lui donner un id unique :

$content .= '
<form name="formajax" id="formajax"
action="'.$this->pi_getPageLink($GLOBALS['TSFE']->id).'"
method="post"> Field:<input type="text" name="field" id="field" size="20" value="nom"><br> Table :<input type="text" name="table" size="30" id="table"><br>
Criteria:<input type="text" name="critere" size="50" id="critere" value="uid<10"><br> <input type="button" onclick="' . $this->prefixId . 'processFormData(xajax.getFormValues(\'submittest\'))" value="Envoyer" > </form><div id="results"> Resultats</div>
';

Trois informations importantes :
- le nom du formulaire
- processFormData pour l'évenement onclick. Un évenement onChange aurait également été possible.
- la zone HTML pour la réponse : <div id="results"> Resultats</div>

La fonction processFormData est chargée de récupérer les données et de les traiter.

Dans mon extension :

function processFormData($data) {

        $this->piVars = $data[$this->prefixId];
        
        // On transmet les données reçues à une autre fonction pour le traitement (ex : requête en base)
        $content = $this->sGetFormResult($data["field"], $data["table"],
$data["critere"]);

       // préparation de la réponse
      $objResponse = new tx_xajax_response();
     
      // 'results' est le nom de l'id où apparaitra la réponse
      $objResponse->addAssign('results', 'innerHTML', t3lib_div::view_array($content));
      return $objResponse->getXML();

}

Voilà, c'est tout simple. N'hésitez pas à poser vos questions ou remarques :)

[EDIT]
J'oubliais quelques liens :

Extension xajax sur le TER
Documentation sur le TER
Site officiel xajax


June 04

Fichier XML de traduction pour les labels quotidiens

Un nouveau projet est né sur le wiki de TYPO3 : proposition pour un fichier locallang commun.
Il s'agit de proposer un fichier locallang pour les labels souvent utilisés.
On aurait déjà :
  • Yes
  • No
  • OK
  • Cancel
  • Open
  • Close
  • About
  • Help
  • Up
  • Down
  • Left
  • Right
  • Move
  • Edit
  • Save
  • Delete
  • View
  • Print
  • Reload
  • Login
  • Logout

May 03

Un rechercher - remplacer d'une chaine de caractères dans un répertoire

Voici une commande bien utile pour faire un rechercher/remplacer dans des fichiers situés dans un répertoire sous GNU/Linux. Cette commande va récursivement remplacer 'oldstring' par 'newstring' depuis le répertoire courant :
find ./ -type f -exec sed -i 's/oldtring/newstring/' {} \;
April 14

Problème de base de données et d'encodage UTF-8

Il me semblait que j'en avais terminé de ces problèmes d'encodage utf-8 et de bases de données. A l'époque, j'avais rédigé un article sur TYPO3 et l'encodage utf-8. J'ai appliqué les recommandations de mon article pour chaque installation et je n'ai pas eu de problème, jusqu'à aujourd'hui, sur une Debian fonctionnant sous PHP 5.2 / MySQL 5 - TYPO3 4.1.6. Il semblerait que je rencontre le même problème que sur cette page du bugtracker. Pour résoudre mon problème, j'ai dû également supprimer la ligne SET CHARACTER SET utf8 dans setDBinit. Bref, il semblerait que cette ligne ne soit plus nécessaire...
April 08

Developer Log une extension pour les développeurs

François Suter à déposé sur le TER une nouvelle extension pour les développeurs. Cette extension permet de tracer facilement tous les messages ainsi que les erreurs dans TYPO3 grâce à l'ajout d'un module backend. En réalité, à force de modifier l'extension CCDevlog, il a pensé qu'il était préférable (et nous aussi ;) ) de mettre le fruit de son travail à disposition de tous le monde. Elle contient des améliorations et des résolutions de bugs.
Extension Developer Log
Manuel de l'extension
March 10

Permissions dans fileadmin

"Bonjour ! Je voudrais savoir si il est possible de spécifier des permissions dans le répertoire fileadmin pour tel ou tel groupe d'utilisateurs, un peu comme dans l'arborescence de TYPO3 ?"

Voilà le genre de question que l'on rencontre souvent sur des forums dédiés à TYPO3. La seule réponse que l'on donne est la suivante : développer une extension ou se débrouiller avec les permissions du système GNU/Linux. Cependant, la situation pourrait changer... pas de faux espoir mais je viens de tomber sur cette extension sur le TER : http://typo3.org/extensions/repository/view/gest_doc/1.0.0/

Voici le résumé : Cette extension permet de donner des accs sur les fichiers situs sous fileadmin/. Il est possible de restreindre les accs selon la date ou le groupe de lutilisateur FE. Ct FE, possibilit deffectuer des rec[...]. Je ne l'ai pas testée mais peut-être que certains d'entre-vous auraient quelques retours ?
View more entries
 

CV

CV Développeur TYPO3