Annonce

Réduire
1 sur 2 < >

C'est [Réglé] et on n'en parle plus ?

A quoi ça sert ?
La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
Comment ajouter la mention [Réglé] à votre discussion ?
1 - Aller sur votre discussion et éditer votre premier message :


2 - Cliquer sur la liste déroulante Préfixe.

3 - Choisir le préfixe [Réglé].


4 - Et voilà… votre discussion est désormais identifiée comme réglée.

2 sur 2 < >

Assistance au forum - Outil de publication d'infos de votre site

Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

UTILISER À VOS PROPRES RISQUES :
L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

Problèmes connus :
FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

Installation :

1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

Archive zip : https://github.com/AFUJ/FPA/zipball/master

2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
et remplacer www. votresite .com par votre nom de domaine


Exemples:
Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
Télécharger le script fpa-fr.php dans: /public_html/
Pour executer le script: http://www..com/fpa-fr.php

Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
Télécharger le script fpa-fr.php dans: /public_html/cms/
Pour executer le script: http://www..com/cms/fpa-fr.php

En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
Voir plus
Voir moins

Modification du mode de tri des contenus

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Modification du mode de tri des contenus

    Bonjour,

    j'essaie de modifier une vue "catégory" de Joomla.

    Un dernier détail me pose problème :

    - dans le fichier xml de ma vue, je peux modifier le champs "orderby_sec" ( celui qui permet de choisir l'ordre d'affichage des artcles)

    Je voudrais pouvoir les trier selon un champs personnalisé, je reajoute donc une ligne en fin des options :

    Code:
    				<field
    					name="orderby_sec"
    					type="list"
    					label="JGLOBAL_ARTICLE_ORDER_LABEL"
    					description="JGLOBAL_ARTICLE_ORDER_DESC"
    					useglobal="true"
    					>
    					<option value="front">COM_CONTENT_FEATURED_ORDER</option>
    					<option value="rdate">JGLOBAL_MOST_RECENT_FIRST</option>
    					<option value="date">JGLOBAL_OLDEST_FIRST</option>
    					<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
    					<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
    					<option value="author">JGLOBAL_AUTHOR_ALPHABETICAL</option>
    					<option value="rauthor">JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL</option>
    					<option value="hits">JGLOBAL_MOST_HITS</option>
    					<option value="rhits">JGLOBAL_LEAST_HITS</option>
    					<option value="random">JGLOBAL_RANDOM_ORDER</option>
    					<option value="order">JGLOBAL_ORDERING</option>
    					<option	value="rorder">JGLOBAL_REVERSE_ORDERING</option>
    					<option value="vote" requires="vote">JGLOBAL_VOTES_DESC</option>
    					<option value="rvote" requires="vote">JGLOBAL_VOTES_ASC</option>
    					<option value="rank" requires="vote">JGLOBAL_RATINGS_DESC</option>
    					<option value="rrank" requires="vote">JGLOBAL_RATINGS_ASC</option>
    					<option value="dateAgenda" requires="vote">Date dans l'agenda</option>
    				</field>
    Qui m'ajoute une valeur "dateAgenda" dans mes paramètres passés au trigger du :

    Code:
    $dispatcher->trigger('onContentPrepare', array($this->category->extension . '.categories', &$this->category, &$this->params, 0));
    Mais étonnament si je fais un var_dump de mon "$this->lead_items " AVANT le trigger onContentPrepare j'ai déjà l'affichage de mes articles (j'en déduis qu'ils sont chargés avant ...) mais alors comment le paramètre de tri "orderby_sec" interagit pour changer l'ordre des articles vue que le chargement est déjà fait ?

    Si quelqu'un a une idée ?

    Bonne journée

  • #2
    Re : Modification du mode de tri des contenus

    Bonjour,

    Le "orderby_sec" est géré directement dans le code du com_content/helpers/query.php (appelé par _buildContentOrderBy du fichier com_content\models\category.php).

    Donc, si vous souhaitez ajouter un paramètre, il faut donc modifier ces fichiers donc passer par une surcharge du composant.

    Pascal
    If anything can go wrong, it will...
    If I can help, I will ..https://conseilgouz.com

    Commentaire


    • #3
      Re : Modification du mode de tri des contenus

      Merci pour ton aide, c'est effectivement ce que j'ai vu en grattant en mode debug ...

      Comme je désire trier sur une date qui est dans un champs personnalisé ça risque de compliquer un peu que de rajouter une ligne de Query.

      Est-ce que par hasard, du moment que j'ai l'objet "$this->lead_items" dans ma surcharge de "blog.php" il ne serait pas possible de modifier l'ordre des éléments de ce tableau d'objets directement dans la surcharge de la vue ?

      Un peu bourrin , mais comme c'est pour une vue spécifique...avec une sorte de "ArrayObject::asort" ?

      Bonne soirée

      Olivier

      Commentaire


      • #4
        Re : Modification du mode de tri des contenus

        Bonjour Olivier,

        En creusant un peu, j'ai trouvé un plugin qui semble permettre d'adapter ce que vous souhaitez au niveau d'un composant standard : https://gruz.ml/en/extensions/mvcoverride.html

        C'est basé sur un plugin développé par Ghazal : https://github.com/ghazal/plg_mvcoverride

        Gardez à l'idée qu'il ne faut pas modifier directement les composants standards Joomla, car, tout est remis d'aplomb à chaque mise à jour (presque tous les mois...).

        Pascal
        If anything can go wrong, it will...
        If I can help, I will ..https://conseilgouz.com

        Commentaire


        • #5
          Re : Modification du mode de tri des contenus

          J'ai tout de même un soucis avec un champ personnalisé en clé de tri.

          En effet, les champs personnalisés sont renseignés par un plugin sur un événement "onContentPrepare", c'est-à-dire largement après la requête initiale utilisant les conditions de tri orderby_sec.

          Donc, il faut effectivement aller "mouliner" la liste des documents trouvés au niveau de la view dans la méthode display du view.html.php en allant dans $item->jcfields pour trouver votre zone date.

          Remarque: j'ai fait un petit essai et la date récupérée est au format jj/mm/aa, donc à reformatter en quantième si vous souhaitez trier.

          Bref, que du plaisir.....

          Pascal

          PS: si vous modifiez uniquement le fichier view.html.php, on est revenu dans une surcharge "simple", donc, peut-être pas besoin du plugin évoqué dans le message précédent...
          Dernière édition par pmleconte à 09/10/2017, 12h33
          If anything can go wrong, it will...
          If I can help, I will ..https://conseilgouz.com

          Commentaire


          • #6
            Re : Modification du mode de tri des contenus

            Bonjour,

            En fait, j'ai fait quelques tests et le plus simple est quand même de passer par une surcharge simple.

            Donc, j'ai récupéré le fichier blog.php à partir du répertoire components\com_content\views\category\tmpl. Je l'ai copié dans mon répertoire <template>/html/com_content/category.

            Ensuite, j'ai "joué" avec une zone personnalisé (ladate) qui contenait ..... une date en modifiant le fichier comme suit:

            Code PHP:
            <?php
            /**
             * @package     Joomla.Site
             * @subpackage  com_content
             *
             * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
             * @license     GNU General Public License version 2 or later; see LICENSE.txt
             */

            defined('_JEXEC') or die;

            JHtml::addIncludePath(JPATH_COMPONENT '/helpers');

            JHtml::_('behavior.caption');

            $dispatcher JEventDispatcher::getInstance();

            $this->category->text $this->category->description;
            $dispatcher->trigger('onContentPrepare', array($this->category->extension '.categories', &$this->category, &$this->params0));
            $this->category->description $this->category->text;

            $results $dispatcher->trigger('onContentAfterTitle', array($this->category->extension '.categories', &$this->category, &$this->params0));
            $afterDisplayTitle trim(implode("\n"$results));

            $results $dispatcher->trigger('onContentBeforeDisplay', array($this->category->extension '.categories', &$this->category, &$this->params0));
            $beforeDisplayContent trim(implode("\n"$results));

            $results $dispatcher->trigger('onContentAfterDisplay', array($this->category->extension '.categories', &$this->category, &$this->params0));
            $afterDisplayContent trim(implode("\n"$results));

            // on commence par les favoris

            $newarray = array();
            foreach (
            $this->lead_items as $item) {
                if (
            is_array($item->jcfields)) {
                    foreach (
            $item->jcfields as $field) {
                        if(
            $field->name == "ladate") { // <== champ personnalisé servant de clé
                            
            $ladate $field->value;
                            
            $ladate date("Ymd",strtotime(str_replace("/",".",$ladate)));
                            
            $newarray[$ladate] = $item;
                        }
                    }
                }
            }
            ksrort($newarray); // tri plus récent en premier
            $this->lead_items = array();
            foreach (
            $newarray as $item) {
                
            $this->lead_items[] = $item;
            }
            // ensuite, on prend les intro.
            $newarray = array();
            foreach (
            $this->intro_items as $item) {
                if (
            is_array($item->jcfields)) {
                    foreach (
            $item->jcfields as $field) {
                        if(
            $field->name == "ladate") { // <== champ personnalisé servant de clé
                            
            $ladate $field->value;
                            
            $ladate date("Ymd",strtotime(str_replace("/",".",$ladate)));
                            
            $newarray[$ladate] = $item;
                        }
                    }
                }
            }
            krsort($newarray); // tri plus récent en premier
            $this->intro_items = array();
            foreach (
            $newarray as $item) {
                
            $this->intro_items[] = $item;
            }
            ?>..........
            Attention: si la date est absente, on obtient une date 1970/....

            Pascal
            If anything can go wrong, it will...
            If I can help, I will ..https://conseilgouz.com

            Commentaire


            • #7
              Re : Modification du mode de tri des contenus

              Bonjour,

              en premier lieu je tiens à te remercier pour ton aide.

              J'ai jeté un oeil sur ton code, en le mettant "brut de décoffrage" il me manque toujours un élément :

              - si j'ai 4 entrées agenda, il m'en sort 3 , etc.

              Par contre en reprenant ton code, je l'ai adapté pour ajouter une propriété "dateTri" auy objets de "$this->lead_items" avec la date du champs personnalisé, je peux ensuite faire un "usort" et de comparer les dates pour les trier.

              J'ai toutes mes entrées et triées par date et la condition permet de lier le tri au champ de sélection dans l'interface de paramètre du lien de menu.

              Code:
              ...
              $afterDisplayContent = trim(implode("\n", $results));
              //*****************************************************************
              
              //var_dump( $this->params);
              // valeur de cle de tri venant de la surcharge de "agenda.xml"
              if( $this->params['orderby_sec']=="dateAgenda"){ // si on veut un tri sur le champ "ag-date"
              
              	// fonction de comparaison des dates 
              	//-------------------------------------------------
              	function comparedate($a, $b) {
              		return strcmp($a->dateTri, $b->dateTri);
              	}
              	//------------------------------------------------
              
              	if (!empty($this->lead_items)){ // si il y a des entrées agendas 
              			foreach ($this->lead_items as &$item){
              					// boucler sur les jcfields
              					if (is_array($item->jcfields)) {
              						foreach ($item->jcfields as $field) {
              							if($field->name == "ag-date") { // <== champ personnalisé servant de clé
              								$ladateAgenda = $field->value;
              								$date = DateTime::createFromFormat('d/m/y', $ladateAgenda);
              								// ajout de la propriété "dateTri"
              								$item->dateTri = $date->format('y-m-d');
              							}
              						}
              					} 	
              			}
              		// tri du tableau
              		usort($this->lead_items, 'comparedate');
              	}
              
              //*************************************************************************************************
              }
              ?> 
              <div class="blog ...
              Je me suis largement inspiré de ton code, merci encore pour ton aide

              Olivier

              Commentaire

              Travaille ...
              X