Fork me on GitHub




(1) 2 3 4 ... 6 »


Utiliser l'api allociné dans xoopstube
Régulier
Inscrit: 10/09/2007 11:51
Messages: 476
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';    
?>

Posté le : 22/12/2014 18:54
Partager Twitter Partagez cette article sur GG+
Re: Utiliser l'api allociné dans xoopstube
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
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.

Posté le : 22/12/2014 20:22
Partager Twitter Partagez cette article sur GG+
Re: Utiliser l'api allociné dans xoopstube
Régulier
Inscrit: 10/09/2007 11:51
Messages: 476
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

Posté le : 22/12/2014 21:07
Partager Twitter Partagez cette article sur GG+
Re: Utiliser l'api allociné dans xoopstube
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
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}>

Posté le : 22/12/2014 21:23
Partager Twitter Partagez cette article sur GG+
Re: Utiliser l'api allociné dans xoopstube
Régulier
Inscrit: 10/09/2007 11:51
Messages: 476
Re

Merci pour les conseils, je vais les appliquer.

J'arrête pour aujourd'hui, je te dirait demain si j'ai réussi.

Posté le : 22/12/2014 21:26
Partager Twitter Partagez cette article sur GG+
Re: Utiliser l'api allociné dans xoopstube
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
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

Posté le : 22/12/2014 21:32

Open in new window

Xoops 2.5.7.2 - Debian 8.2 - Apache 2.4.10 - MySQL 5.5.47 - Php 5.6.17
Partager Twitter Partagez cette article sur GG+
Re: Utiliser l'api allociné dans xoopstube
Régulier
Inscrit: 10/09/2007 11:51
Messages: 476
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


Posté le : 22/12/2014 22:28
Partager Twitter Partagez cette article sur GG+
Re: Utiliser l'api allociné dans xoopstube
Régulier
Inscrit: 10/09/2007 11:51
Messages: 476
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.


Posté le : 22/12/2014 23:17
Partager Twitter Partagez cette article sur GG+
Re: Utiliser l'api allociné dans xoopstube
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
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}>



Posté le : 23/12/2014 00:36
Partager Twitter Partagez cette article sur GG+
Re: Utiliser l'api allociné dans xoopstube
Régulier
Inscrit: 10/09/2007 11:51
Messages: 476
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!!


Posté le : 23/12/2014 01:15
Partager Twitter Partagez cette article sur GG+

 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

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