Implémentation du mécanisme « autocompletion » sous Typo3
1) Installation du mécanisme client (JavaScript)
Tout d’abord il faut récupérer les librairies JavaScript sur le site JQuery : JQuery autocomplete
Puis vous devez intégrer dans votre HEAD HTML au minimum les deux sources suivantes:
<script type="text/javascript" language="javascript" src="fileadmin/javascript/jquery-latest.js"></script> <script type="text/javascript" language="javascript" src="fileadmin/javascript/jquery.autocomplete.js"></script>
2) Implémentation de la classe avec l’ « autocompletion »
Voici un exemple simple d’intégration de l’ « autocompletion » dans un « plugin » Typo3.
<?php
// ...
require_once(PATH_tslib.'class.tslib_pibase.php');
// ...
class tx_extname_pi1 extends tslib_pibase {
public $extKey = 'extname';
private $content = '';
private $ajaxGetDataFile;
// ...
public function main($content, $conf) {
$this -> conf = $conf;
$this -> pi_setPiVarDefaults();
$this -> pi_loadLL();
$this -> pi_USER_INT_obj = 1;
$this -> ajaxGetDataFile = $this -> pi_getPageLink($GLOBALS['TSFE'] -> id).'?eID='.$this -> extKey;
$this -> content = $this -> makeHtml();
return $this -> pi_wrapInBaseClass($this -> content);
}
// ...
private function makeHtml() {
$this -> addAdditionalJSToHeaderPart(); // Add JS part for JQuery
// ...
}
// ...
/**
* Add additional header data
*
* @return void
*/
private function addAdditionalJSToHeaderPart() {
$jsString = '<script type="text/javascript">
/* <![CDATA[ */
$(document).ready(function() {
$("#tx_extname_pi1").autocomplete("'.$this -> ajaxGetDataFile.'&pid='.$this -> conf['your_pid_target'].'", {
minChars: 2,
resultsClass: "ac_results my_css_class",
selectFirst: false,
max: 9,
autoFill: 0,
delay: 400,
scroll: 1,
matchContains: 1,
multiple: 0,
multipleSeparator: ", "
})
jQuery("#tx_extname_pi1").result(function (event, data, formatted) {
jQuery("#your_form_tag_name").submit();
});
});
/* ]]> */
</script>';
$GLOBALS['TSFE'] -> additionalHeaderData[$this -> extKey] = $jsString;
}
}
// ...
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/extname/pi1/class.tx_extname_pi1.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/extname/pi1/class.tx_extname_pi1.php']);
}
?>
L’attribut $ajaxGetDataFile fait appel à une classe eID, je ne reviendrai pas sur ce concept, vous avez un article disponible sur ce site qui explique cette implémentation.
// ... $this->ajaxGetDataFile = $this->pi_getPageLink($GLOBALS['TSFE']->id).'?eID... // ...
Note pour le script JQuery:
Vous pouvez développer vos propres « css class » my_css_class pour l’affichage des résultats.
Vous pouvez développer vos propres « css class » my_css_class pour l’affichage des résultats.
...
resultsClass: "ac_results my_css_class",
...
jQuery("#your_form_tag_name").submit();
#your_form_tag_name: correspond par cet exemple à l’ « id » d’un formulaire HTML (donc le [ENTER] va produire un « submit » lorsque vous allez choisir un des résultats)
... <form id="your_form_tag_name" ...

