Cette interface structure la gestion des listings, couplée au javascript, afin de produire des tableaux, appelés en ajax, et intégrant, les tris, les nombres de lignes, la recherche global et/ou par colonne, etc... .
Cette interface est donc utilisée pour toutes les listes de produits, commande, clients..
Nous allons voir ici comment exploiter ces tableaux.
Étape 1, déclaration de l’interface
Ajouté au interface déjà présent, ou ajouté la mention implements et le nom de cet interface.
implements InterfacedTJsonS{
....
}
Étape 2, les méthodes associé
La déclaration de l’interface pour la class (ex catégories) impose de déclarer les méthodes suivante ; sans quoi vous aurez une erreur php.
Méthode tep_get_modele()
cette méthode public, permet de récupérer un tableau des élément triables du tableau . Le tableau ce doit de définir les colonne dans l’ordre du tableau affiché, et donc la base (balise table et entête) est structuré dans les fichiers de gabarits.
return array( 'categories_id',
'categories_image',
'categories_name',
'categories_status',
'categories_hidden',
);
}
Note, cette méthode est public et static
Méthode function tep_get_list()
C’est cette méthode qui construit le tableau de base qui sera affiché, elle doit intégrer une requête sql permettant le tri et la recherche.
De plus, elle doit renvoyer un tableau ne contenant strictement que les éléments destinés à l’affichage. Si le nombre de colonne ne correspond pas, une erreur js se produira et le tableau ne s’affichera pas.
Elle doit aussi assurer la fonction de split page pour régler le nombre de ligne par page.
Ex pour le module categories
global $languages_id,$query_numrows;
$cID=(int)(empty($current_ID)?0:$current_ID );
$DB=Database::getInstance();
$categories_query = "select c.categories_id, cd.categories_name, c.categories_image, c.parent_id, c.sort_order, c.date_added, c.last_modified,c.categories_status,c.categories_hidden, cd.categories_description, cd.categories_head_keywords_tag from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '" . $cID . "' and c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' ".$sWhere." order by ".((!empty($sOrder)) ? $sOrder : " c.parent_id ASC , c.sort_order ASC, cd.categories_name ASC");
$categories_split = new splitPageResults($page, $rowbyp, $categories_query,$query_numrows);
$pq=$DB->query($categories_query);
while ($categories = $pq->fetchAssoc()) {
$categories['categories_image']=(!empty($categories['categories_image'])) ? tep_info_image($categories['categories_image'], $categories['categories_name'], TEMP_BO_SMALL_IMAGE_WIDTH, TEMP_BO_SMALL_IMAGE_HEIGHT) : ' N/A';
$categories['categories_status']=self::get_status_categories($categories);
$categories['categories_hidden']=self::get_status_menu($categories);
self::$list[]=$categories;
}
$li=$res=array();
foreach(self::$list as $item){
$li[0]=$item['categories_id'];
foreach(self::tep_get_modele() as $k) $li[$k]=(isset($item[$k]) && !empty($item[$k]))? $item[$k] : 'N/A';
$li['action']=self::get_item_action($item);
$res[]=$li;
}
if(count($res)==0) $res[]= self::emptyResult();
return $res;
}
Note : pour chaque tableau (dans noter exemple $li), la clef ’0’ doit correspondre à l’id (ici de la categorie). Cet element est normalisé, et assure la liaison avec l’interface InterfacedInnerHtml
les arguments passé à cette fonction sont normalisés, tel que
- $page=1 (page en cours )
- $rowbyp=10 (nombre de ligne du tableau )
- $sOrder=’’ (colonnes de tri)
- $sWhere=’’ (champs de recherche)
- $options=’’
Note, cette méthode est public et static
Core Backoffice
Cet interface n’est disponible que dans le backoffice, il est définis par le fichier class.interfaces.php