Fork me on GitHub




(1) 2 3 4 ... 6 »


#1 Utiliser l'api allociné dans xoopstube
seboseboss Posté le : 22/12/2014 18:54
Salut

Je sais pas trop comment m'y prendre pour afficher les résultats de tableaux dans les templates xoopstube, je m'explique.

J'ai fait une première page avec un formulaire pour entrer le titre d'un film et aller chercher les infos allociné.

Le formulaire renvoi à un deuxième fichier qui va envoyez la requête et traiter les infos, jusque la pas de soucis tout fonctionne à merveille.

j'arrive pas à inclure le résultat de tableau au template, en fait je sais pas comment procéder.

En faisant un foreach dans le fichier de traitement, ça me fait sauter le template et les résultats s'affiche sur fond blanc.

Je suppose qu'il faut faire le foreach directement dans le templates avec smarty et donc comment est ce que je parcours le tableaux? j'utilise while comme avec une requête et j'assigne un template avec xoops templates append?

je suis sur la bonne voie quand même mais xoops me simplifie pas les choses.



Pour mieux comprendre, je vous met le fichier comme il est acctuellement, (pas fini d'adapter)

<?php
/**
 * $Id: alloinfos.php
 * Module: XoopsTube
 */

include 'header.php';
include 
XOOPS_ROOT_PATH '/header.php';
    function 
removeAccents($title)
        {
        
$accentued = array("à","á","â","ã","ä","ç","è","é","ê","ë","ì",
        
"í","î","","ï","ñ","ò","ó","ô","õ","ö","ù","ú","û","ü","ý","ÿ",
        
"À","Á","Â","Ã","Ä","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ñ","Ò",
        
"Ó","Ô","Õ","Ö","Ù","Ú","Û","Ü","Ý");
        
$nonaccentued = array("a","a","a","a","a","c","e","e","e","e","i","i",
        
"i","i","n","o","o","o","o","o","u","u","u","u","y","y","A","A","A",
        
"A","A","C","E","E","E","E","I","I","I","I","N","O","O","O","O","O",
        
"U","U","U","U","Y");

        
$title str_replace($accentued$nonaccentued$title);

        return 
$title;
        }
        
$title $_POST['filmtitle'] ;
    
// Inclure le fichier
    
require_once XOOPS_ROOT_PATH '/api-allocine/api-allocine-helper.php';
    
    
// Construire l'objet AlloHelper
    
$film = new AlloHelper;
     
    
// On peut régler des paramètres
    // Ici, supprimer les tags HTML dans le synopsis.
    
$film->set('striptags''synopsis');
     
    
// Pour plus de lisibilité, on met les valeurs dans des variables.
    
$q removeAccents($title);
    
$page 1;
    
$count 1;
    
$filter = array('movie');
     
    try
    {
        
// Envoi de la requête et traitement des données reçues.
        // $url est passée par référence et contiendra l'URL ayant appelé les données.
        
$donnees $film->search$q$page$counttrue$filter$url );
         
        
// Les données sous forme d'un array
        
foreach ($donnees['movie'] as $key) {
            if (isset(
$key['Title']))
                echo 
$key['Title'] . "<br>";
            
        echo 
"<br>";
        echo 
"ID du film: "$key['code'], PHP_EOL;
        echo 
"<br>";
         echo 
"Titre original: "$key['originalTitle'], PHP_EOL;
        echo 
"<br>";
        echo 
"Annee de production: "$key['productionYear'], PHP_EOL;
        echo 
"<br>";
        echo 
"Réalisateur: "$key['castingShort']['directors'], PHP_EOL;
        echo 
"<br>";
        echo 
"Acteurs: "$key['castingShort']['actors'], PHP_EOL;
        echo 
"<br>";
        echo 
"Synopsis: "$key['synopsisShort'], PHP_EOL;
        echo 
"<br>";
        }
    
    }
    catch ( 
ErrorException $e)
    {
        echo    
"<a href="$url">$url</a><br />",
                
"Erreur {$e->getCode()}{$e->getMessage()}<br />",
                
"Trace:<br />{$e->getTraceAsString()}",
               
print_r($film->getPresets(), 1);
    }
$xoopsOption['template_main'] = 'xoopstube_allocine.html';     
$xoopsTpl->assign('module_dir'$xoopsModule->getVar('dirname'));
include 
XOOPS_ROOT_PATH '/footer.php';    
?>
#2 Re: Utiliser l'api allociné dans xoopstube
montuy337513 Posté le : 22/12/2014 20:22
commence par

Seul chose à savoir c'est que les balises smarty sur Xoops sont légèrement différentes
c'est pas {foreach}, c'est <{foreach}>. Demande moi pas pourquoi mais c'est comme ça.
#3 Re: Utiliser l'api allociné dans xoopstube
seboseboss Posté le : 22/12/2014 21:07
RE

J'ai pas du bien comprendre:

J'ai donc fait ceci:

try
    {
        
// Envoi de la requête et traitement des données reçues.
        // $url est passée par référence et contiendra l'URL ayant appelé les données.
        
$donnees $film->search$q$page$counttrue$filter$url );
        
        
$xoopsTpl->assign('donnees'$donnees);


Et dans le tempplate:

<ul>
<{foreach from=$donnees item=donnees}>
<li><{$donnees}></li>
<{/foreach}>
</ul>

rien ne s"affiche
#4 Re: Utiliser l'api allociné dans xoopstube
montuy337513 Posté le : 22/12/2014 21:23
c'est normal que rien ne s'affiche car tu affiches le tableau complet

conseil 1 : évite de donner à 'item' et à 'from' le même nom, histoire de ne pas s'embrouiller
conseil 2 : toujours être sûr des données qu'on utilise, est-ce que $donnees contiendra toujours un tableau (même si la requête ne donne aucun résultat, un bug si la requête retourne false)

<ul>
<{foreach 
from=$liste item=donnees}>
<
li><{$liste.nom}></li>
<{/foreach}>
</
ul>

Ceci est un exemple, en smarty on appelle le tableau puis la clé <{$nom_tableau.cle}>
#5 Re: Utiliser l'api allociné dans xoopstube
seboseboss Posté le : 22/12/2014 21:26
Re

Merci pour les conseils, je vais les appliquer.

J'arrête pour aujourd'hui, je te dirait demain si j'ai réussi.
#6 Re: Utiliser l'api allociné dans xoopstube
slider84 Posté le : 22/12/2014 21:32
Un petit exemple basique pour t'aider à comprendre:

Dans ton script php:
// ta requête
$sql$xoopsDB->query('SELECT  champ1,champ2,champ3,champ4 FROM '.$xoopsDB->prefix('mytable');
// construction du tableau de valeurs à passer
while ( $myrow $xoopsDB->fetchArray($sql) ) {
    
$myarray =array();
    
$myarray['champ1'] = $myrow['champ1'];
    
$myarray['champ2'] = $myrow['champ2'];
    
$myarray['champ3'] = $myrow['champ3'];
    
$myarray['champ4'] = $myrow['champ4'];
//passage du tableau de valeurs pour chaque enregistrement vers
//la variable smarty (ici elle sera nommée 'mysmarty').
//Ajout à la smarty pour chaque enregistrement trouvé
    
$xoopsTpl->append('mysmarty'$myarray);
}

Dans ton template, affichage des valeurs du tableau contenues dans la variable smarty (pour chaque enregistrement):
<{foreach item=mysmartyitem from=$mysmarty}>
<
ul>
<
li>Mon champ 1: <{$mysmartyitem.champ1}></li>
<
li>Mon champ 2: <{$mysmartyitem.champ2}></li>
<
li>Mon champ 3: <{$mysmartyitem.champ3}></li>
<
li>Mon champ 4: <{$mysmartyitem.champ4}></li>
</
ul>
<
br><hr>
<{/foreach}>

Astuce: Tu mets le mode 'Debug pour smarty et template' actif dans l'administration de Xoops pour voir comment est construite ta smarty
#7 Re: Utiliser l'api allociné dans xoopstube
seboseboss Posté le : 22/12/2014 22:28
Salut

En fait quand c'est une requête sql ,j'ai bien compris le système avec while et xoopstpl append mais cette fois c'est une variable array (enfin c'est une requête mais ça se passe à un autre niveau) et je n'est jamais traité cette façon de faire, c'est pour ça que j'ai un peu de mal sans avoir un exemple concret.

Apparemment y'a pas besoin de parcourrir le tableau et d'attribuer chaque entrée du tableau ,ont peu les appeler direct dans le template.

Je vais tester tout ça.

Pas facile

Bon ben ça marche pas en faisant comme ça:
fichier php:
try
    {
        
// Envoi de la requête et traitement des données reçues.
        // $url est passée par référence et contiendra l'URL ayant appelé les données.
        
$donnees $film->search$q$page$counttrue$filter$url );
        
        
$xoopsTpl->append('infosfilm'$donnees);


template:
<ul>
<{foreach 
item=infosfilm from=$donnees}>
<
li><{$infosfilm.title}></li>
<
li><{$infosfilm.code}></li>
<{/foreach}>
</
ul>


Toujours rien qui s'affiche

#8 Re: Utiliser l'api allociné dans xoopstube
seboseboss Posté le : 22/12/2014 23:17
Déja est ce que c'est vraiment $données qu'il faut appeller car le code de base fonctionne avec $donnees['movie']:


foreach ($donnees['movie'] as $key)


Les infos brut de $données ça peut aider:
Array ( [page] => [count] => [results] => Array ( [0] => Array ( [type] => movie [$] => 10 ) [movie] => 10 ) [totalResults] => 10 [movie] => Array ( [0] => Array ( [code] => 61282 [originalTitle] => Avatar [productionYear] => 2009 [release] => Array ( [releaseDate] => 2010-09-01 ) [castingShort] => Array ( [directors] => James Cameron [actors] => Sam WorthingtonZoe SaldanaSigourney WeaverStephen LangMichelle Rodriguez ) [statistics] => Array ( [pressRating] => 4.33333 [userRating] => 4.29463 ) [poster] => AlloImage Object ( [imageIcon:AlloImage:private] => [imageBorder:AlloImage:private] => [imageSize:AlloImage:private] => [imageHost:AlloImage:private] => images.allocine.fr [imagePath:AlloImage:private] => medias/nmedia/18/78/95/70/19485155.jpg ) [link] => Array ( [0] => Array ( [rel] => aco:web [href] => http://www.allocine.fr/film/fichefilm_gen_cfilm=61282.html ) ) [title] => Avatar [posterURL] => http://images.allocine.fr/medias/nmed ... /95/70/19485155.jpg ) ) [movieSorted] => Array ( [0] => Array ( [code] => 61282 [originalTitle] => Avatar [productionYear] => 2009 [release] => Array ( [releaseDate] => 2010-09-01 ) [castingShort] => Array ( [directors] => James Cameron [actors] => Sam Worthington, Zoe Saldana, Sigourney Weaver, Stephen Lang, Michelle Rodriguez ) [statistics] => Array ( [pressRating] => 4.33333 [userRating] => 4.29463 ) [poster] => AlloImage Object ( [imageIcon:AlloImage:private] => [imageBorder:AlloImage:private] => [imageSize:AlloImage:private] => [imageHost:AlloImage:private] => images.allocine.fr [imagePath:AlloImage:private] => medias/nmedia/18/78/95/70/19485155.jpg ) [link] => Array ( [0] => Array ( [rel] => aco:web [href] => http://www.allocine.fr/film/fichefilm_gen_cfilm=61282.html ) ) [title] => Avatar [posterURL] => http://images.allocine.fr/medias/nmed ... /95/70/19485155.jpg ) ) )


D'ailleur y'a un soucis, il manque le synopsis(c'est un autre pb)

J'y connais pas grand chose en type de tableau mais je crois que c'est un tableau de données et donc il doit falloir utiliser section au lieu de foreach.

J'ai raison ou pas?

Non ça marche pas, ou ça me prend la tête ce truc, j'ai eu aucun pb pour adapter l'api allociné et la je passe des heures et des heures pour afficher 3 lignes, prise de tête.

J'arrête.

#9 Re: Utiliser l'api allociné dans xoopstube
montuy337513 Posté le : 23/12/2014 00:36
en tout cas, c'est un tableau, donc si tu fais $donnees[page] tu obtiens 1.
Pour savoir si tu dois utiliser foreach, tout dépend donc ce que tu veux exploiter. mais le plus simple :

Exemple :
affichage de la date de production
<{$donnees.productionYear}>


Mais, comme tu peux le remarquer, dans certaines lignes du tableau, il y a encore un tableau (et oui, c'est un magnifique tableau multidimensionnel)
Dans ce cas, tu peux utiliser foreach (surtout si les clés du second tableau changent systématiquement) ou si c'est identique pour tous les films
Producteur : <{$donnees.castingShort.directors}>


#10 Re: Utiliser l'api allociné dans xoopstube
seboseboss Posté le : 23/12/2014 01:15
Tableau multidimensionnel + smarty, franchement ça commençe à être trop pour moi, j'arrive rien à afficher, en php normal j'y arrive mais quand il s'agit de faire ça dans xoops, c'est pas la même.

<{$donnees.productionYear}>

Ca affiche quoi? ben rien du tout

C'est la surchauffe,ça me prend le choux!!


 Haut   Précédent   Suivant
(1) 2 3 4 ... 6 »



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

138 Personne(s) en ligne (125 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 138 | Plus ...