Forums de la communauté francophone du CMS TYPO3: Service Web Json - Forums de la communauté francophone du CMS TYPO3

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Service Web Json

#1 L'utilisateur est hors-ligne   abu 

  • Nouveau
  • Pip
  • Groupe : Membres
  • Messages : 6
  • Inscrit(e) : 08-février 13

Posté 24 février 2015 à 15:00

Bonjour,

Je développe une petite application mobile qui permet d'afficher des photos hébergées sur un site sous Typo3. Connaissant que très vaguement ce CMS je fais appel à vos connaissances pour connaître les bonnes pratiques avant de commencer à développer quelque chose.

Une extension "maison" à été développée pour l'envoi (formulaire) et l'affichage de photo (galerie). Je voudrais tout simplement ajouter à cette extension un plugin faisant office de service web retournant un flux JSON pour mon affichage sur l'application mobile.

Quelles sont les bonnes pratiques pour ajouter un plugin (pi2) à une extension existante?
Comment appeler directement ce nouveau plugin?

Merci d'avance pour vos renseignements/idées.
0

#2 L'utilisateur est hors-ligne   OlivierSC 

  • Pilier du forum
  • PipPipPipPipPipPipPip
  • Groupe : Administrateur
  • Messages : 1 689
  • Inscrit(e) : 26-juin 09

Posté 24 février 2015 à 15:15

Bonjour,

Avant tout, est ce que tu peux nous préciser quelle est la version de ton TYPO3?
C'est important car la solution peut dépendre de la version du CMS.

Et tout dépend aussi du style et de l'ancienneté du code déjà présent dans ton extension "maison".

Il est possible d'appeler directement une fonction d'un plugin via un mécanisme appelé "eID" (souvent couplé à de l'Ajax).

Tu peux trouver pas mal d'articles sur le sujet comme par exemple :
- Ajax Dans Un Plugin (sur ce forum)
- Bringing AJAX to your frontend plugins
- Ajax et eID sous Typo3
- eID Mechanismus

Le principe est de déclarer l'appel eID et de dire quel sera le script (et la fonction) qui va traiter cet appel.

Cela permet d'appeler simplement et rapidement une fonction précise, de plus c'est assez optimisé car l'ensemble du framework TYPO3 n'est pas chargé.

Ton script devra générer l'intégralité du code qui sera renvoyé au navigateur.

Le coté négatif est qu'il n'est pas simple (et vraiment pas optimisé) de faire appel au typoscript ou à certaines fonctions importantes (comme par exemple la fonction typolink).

Si ton but est de simplement récupérer une liste de photos (stockées en BDD ou dans un répertoire) cela peut être une bonne piste.

N'hésite pas à nous faire un retour là dessus.

OlivierSC
0

#3 L'utilisateur est hors-ligne   abu 

  • Nouveau
  • Pip
  • Groupe : Membres
  • Messages : 6
  • Inscrit(e) : 08-février 13

Posté 24 février 2015 à 16:07

Le site est à l'usage interne uniquement et donc, malheureusement, n'a jamais été réellement mit à jour.
Il est développé avec la version Typo3 4.6

Comme la version de typo3, le code est assez "vieux" dans le sens ou la méthode main retourne directement l'HTML généré.
Le plugin s'ajoute directement sur une page pour l'affichage or je ne veux rien afficher (l'application mobile s'en occupera) mais uniquement récupérer les infos de la BDD (comme tu viens de le dire).

Je vais regarder du côté de "eID".

Merci pour ces informations !
0

#4 L'utilisateur est hors-ligne   abu 

  • Nouveau
  • Pip
  • Groupe : Membres
  • Messages : 6
  • Inscrit(e) : 08-février 13

Posté 25 février 2015 à 14:13

Effectivement eID est parfait pour mon implémentation.

J'ai défini une valeur dans le ext_localconf.php de l'extension avec le chemin de mon script.
Pas forcément besoin de faire une class complète ni de charger l'ensemble du framework.

J'arrive donc bien récupérer mes données de la BDD avec un exec_SELECTquery et sql_fetch_assoc.
Par contre j'ai besoin de récupérer une autre valeur dans une table liée, ne chargeant pas le framwork je ne peux pas faire de pi_getRecord.

Quelle est la meilleure méthode (sans devoir créer une class extend de tslib_pibase) ? Comment puis-je charger certaine fonctionnalité comme AbstractPlugin?
0

#5 L'utilisateur est hors-ligne   OlivierSC 

  • Pilier du forum
  • PipPipPipPipPipPipPip
  • Groupe : Administrateur
  • Messages : 1 689
  • Inscrit(e) : 26-juin 09

Posté 25 février 2015 à 19:19

Bonjour,

Voir le messageabu, le 25 février 2015 à 14:13, dit :

Comment puis-je charger certaine fonctionnalité comme AbstractPlugin?[/size]

Comme précisé, le but de l'eID est de ne charger vraiment que le minimun. En effet, il est peu fait appel aux caches TYPO3 dans ce mécanisme, donc il faut éviter de charger tout ce qui n'est pas vraiment obligatoire.

Voir le messageabu, le 25 février 2015 à 14:13, dit :

je ne peux pas faire de pi_getRecord.

en recherchant dans l'api TYPO3 on peut déterminer le fonctionnement global de cette fonction.
La fonction pi_getRecord appelle la fonction "$GLOBALS['TSFE']->sys_page->checkRecord".
Cette fonction récupère l'élément demandé via une simple requête SQL.
Elle effectue ensuite une mise à jour des données en fonction du workspace.
Enfin elle vérifie que la page "parent" contenant l'enregistrement sélectionné est bien active (non cachée, non supprimée, etc...).

Donc si tu n'utilises pas les workspaces, tu peux réaliser l'équivalent de cette fonction via 1 ou 2 requêtes SQL (suivant si tu veux vérifier l'état de la page "parent").

N'hésite pas à nous faire un retour là dessus.

OlivierSC
0

#6 L'utilisateur est hors-ligne   abu 

  • Nouveau
  • Pip
  • Groupe : Membres
  • Messages : 6
  • Inscrit(e) : 08-février 13

Posté 26 février 2015 à 09:11

Bonjour,

Tout d'abord merci pour ces informations.

Voir le messageOlivierSC, le 25 février 2015 à 19:19, dit :

Donc si tu n'utilises pas les workspaces, tu peux réaliser l'équivalent de cette fonction via 1 ou 2 requêtes SQL (suivant si tu veux vérifier l'état de la page "parent").

Effectivement dans mon cas présent je n'ai que faire des workspaces donc je vais opter pour 2 requêtes.

Tout est parfait, mon application mobile récupère bien toute les données.
Du coups je me suis installé une instance typo3 7.1 (tant qu'à faire) pour un projet personnel. Celui-ci étant public, mes requêtes HTTP cross-domaine ne fonctionnais plus. J'ai donc utilisé du jsonp ainsi que des callbacks. Pour le script PHP j'ai donc ajouté dans le header l'access-control-allow-origin.
Mon seul soucis est avec les images. J'ai pourtant essayé d'ajouter une règle dans le .htaccess typo3:

<IfModule mod_headers.c>
	Header set Access-Control-Allow-Origin "*"
</IfModule>


Typo3 retourne systématiquement une erreur 404. J'ai pourtant vérifier à deux reprise que le chemin soit juste ainsi que l'image existe.

Je sais que Typo3 utilise passablement du cache mais est-il quand possible d’accéder directement aux images?
Merci encore pour ton aide ainsi que tes conseils.
0

#7 L'utilisateur est hors-ligne   Jokerjar 

  • Nouveau
  • Pip
  • Groupe : Membres
  • Messages : 5
  • Inscrit(e) : 02-janvier 13

Posté 06 avril 2017 à 02:47

Signed up for your service for the twitter search notifications.

I have a request, could the different services have different application to make it possible to forward them to different apps?
без подписи
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)