Développer avec RBS Change : Surcharge de "Sites et pages" ?

  • 44117.1

    30/09/2011 17:10


    David Guillot
    Rang : Expert
    Bonjour,

    Nous souhaitons permettre aux webmasters d'ajouter, dans une page, des liens vers des flux RSS interprétables par les navigateurs (les balises <link/> dans le <head>), de la même manière qu'ils règlent les métas. Comment est-ce possible ?

    De mon point de vue de débutant sur Change, je ne vois qu'une solution : overrider la notion de page pour y ajouter une information multiple genre "rsslinks" (qui serait une liste d'URLs à lier). Mais je constate que les pages n'ont pas l'air d'être partie intégrante d'un module ; du coup, comment les surcharger ?

    Merci
    David
  • 44117.2 en réponse à 44117.1 écrit par David Guillot

    30/09/2011 17:42


    Alexandre Simon
    Titre : Développeur RBS Change
    Rang : Expert
    Bonjour,

    Ajouter un flux RSS se fait assez facilement, avec la méthode addLink() de l'objet website_Page (qui n'est pas le document page mais une sorte de surcouche pour "la page en train d'être rendue") .

    Un bloc accède à cet objet avec la méthode getContext(). On peut imaginer un bloc en dur dans le gabarit de page, qui fait les ajouts en cherchant les flux là où c'est "cohérent de les chercher" pour le projet...

    Pour rajouter une propriété sur les pages et permettre de saisir ces flux depuis une page, on crée un document qui déclare cette propriété, hérite de page (module "website", document "page"), et qui "l'injecte" (attributs "extend" et "inject", Cf. http://wiki.rbschange.fr/ref:docs:declarer_un_document).

    Ensuite on surcharge le formulaire de page (override/modules/website/forms/editor/page/(create|properties).xml pour y placer la propriété.

    Vous pouvez créer une propriété de type texte puis faire un explode, ou bien créer une propriété de type "modules_rss/feed" par exemple.
    La deuxième option aurait l'avantage de déclarer le flux, de permettre de le ré-utiliser sur plusieurs pages, ...

    Dans ce scénario, le bloc placé dans le gabarit de page récupérerait le document page (website_Page->getPersistentDocument()) et la propriété ajoutée pour faire les addLink().

    En espérant avoir été clair ;)
  • 44117.3 en réponse à 44117.2 écrit par Alexandre Simon

    30/09/2011 18:35


    David Guillot
    Rang : Expert
    Merci pour cette réponse rapide, la seule info qui me manquait vraiment était de me rappeler que le document page fait partie du module website, et est donc parfaitement injectable.

    Voici donc la solution complète choisie :
    - Injection du document feed du module RSS pour y ajouter un type de contenus référencés, un nombre de contenus et une rubrique dans laquelle aller les chercher
    - Implémentation de l'interface rss_Item pour tous les documents susceptibles d'être référencés dans un flux (si ce n'est pas déjà le cas)
    - Création d'une action GenerateFeed dans la surcharge du module RSS
    - Injection du document page et de son formulaire dans le back-office pour y ajouter la possibilité de saisir des URLs de flux RSS

    Est-ce que cette solution vous paraît viable ? Elle pourrait faire partie des contributions d'Alter Way à Change...
  • 44117.4 en réponse à 44117.3 écrit par David Guillot

    03/10/2011 12:18


    Franck Stauffer
    Titre : Responsable produit
    Rang : Expert
    Bonjour David,

    Cela parait viable : peu de documents implémente rss_item à ce jour et il existe quelques blocs d'affichage (comme les animations commerciales dans animations des boutiques) qui une fois ajoutés dans une page peuvent être configurés pour rajouter un flux dans le head de la page. C'est le mode de fonctionnement que nous avons choisi sur certains modules génériques.

    Un des objectifs à terme est de compléter le module RSS en permettant de créer en BO des flux basés sur des filtres de documents sur les documents qui implémentent l'interface rss_Item.

    Dans tous les cas je ne peux que vous encourager à contribuer dans ce sens : )
  • 44117.5

    04/10/2011 15:44


    David Guillot
    Rang : Expert
    Merci pour ces réponses.

    Nous nous retrouvons confrontés à la définition d'une nouvelle action dans notre surcharge du module RSS. Cela est-il possible ? Il semblerait que nous soyons obligés de placer notre nouvelle action dans un nouveau module, ce qui nous ennuie vraiment, vu que cette action a du sens dans le module RSS. Aurait-on manqué une étape ?

    Edit : ne pas tenir compte de cette question, nous avions oublié l'update-autoload

    Édité par David Guillot 04/10/2011 16:35

  • 44117.6

    17/11/2011 18:54


    David Guillot
    Rang : Expert
    Bonjour,

    Je remets cette discussion au goût du jour car :
    - Nous avons parfaitement créé nos flux RSS à partir de documents du module event, ainsi que l'action permettant d'afficher un flux au format RSS à partir d'un id de document rss/feed, ainsi que la propriété supplémentaire dans le document website/page permettant d'associer des flux RSS à une page
    - Je me trouve devant la problématique : comment déclencher l'ajout de la balise <link> dans la page à partir de la nouvelle propriété de website/page ? Je viens de voir que la classe website_Page, qui a l'air assez centrale dans l'action de rendu d'une page, propose une méthode addRssFeed qui ajoute cette balise <link>... Je souhaite donc savoir quel est le meilleur "endroit" pour appeler cette méthode de manière systématique, sans oublier que je dois avoir accès à l'objet website/page de la page en train d'être affichée, pour pouvoir récupérer ses propriétés.

    Merci d'avance
  • 44117.7 en réponse à 44117.6 écrit par David Guillot

    18/11/2011 09:49


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Bonjour,

    L'endroit le plus indiqué à ce niveau c'est un bloc (on obtient alors la website_Page via $this->getContext()). Donc si vous avez déjà un bloc spécifique présent sur toutes les pages vous pouvez l'ajouter dedans.

    Sinon il est toujours possible d'ajouter un bloc spécifique inclus dans tous les templates de pages et qui ne rend rien de particulier mais se charge de ce genre d'ajout.

    Pour ce qui est du document page courant il peut être récupérer sur l'objet website_Page via la méthode getPersistentPage.
  • 44117.8

    18/11/2011 11:34


    David Guillot
    Rang : Expert
    OK, j'ai créé un bloc ad-hoc dans notre module complétant le module RSS, et je l'ai inséré dans tous les templates utilisés par notre site. Et ça fonctionne, merci !
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1461 membres
Aucun membre connecté