Articles avec Date à venir

DudyDudy Member
décembre 2015 modifié dans Modifications
Bonjour

j'ai une page d’événements pour un tournée pour un groupe de music, je récupéré l'article avec LastArtList comme d'habitude :
[== PHP ==]
<?php $plxShow->lastArtList('<li>#art_date<a href="#art_url" title="#art_title">#art_title</a></li>',5,1) ?>
je souhaiterais que la date affiché,de cette catégorie dans mon cas DateTournée, devrais être plutôt le jour du concert, soit une date a venir, au lieux de la date de la création de l'article,
en fait si je mets une date futur, l'article ne s'affiche pas, que c'est normal,

je me demandais si c’était possible d'avoir un résultat pareil ou comme d'habitude je pose des questions compliqué :o

merci pour vos retour, et si il y à une autre idée, je prends volontiers

belle journée a tous

Réponses

  • PierrePierre Member
    décembre 2015 modifié
    Je peux me prononcer puisque j'ai eu à traiter du même cas très récemment. Si tu utilises lastArtList (sans doute) le système vérifie si l'article est "maintenant à paraître" en vérifiant si la date est passée (bon) ou future (ne pas encore afficher) comme si c'était ton intention en mettant cette date future. Pour sa simplicité, c'était déjà une bonne fonction.

    La fonction, dans class.plx.show.php , peut aussi inverser cette règle avec un simple paramètre, ce qui est bien pratique dans le cas des événements à venir à annoncer qui n'afficherait pas les anciens. C'est bien beau mais la même règle s'applique alors à tous les articles de toutes les catégories.

    Dans mon cas diabolique récent, j'avais à afficher aussi bien les anciens articles d'événements (devenus des albums photos souvenirs) et également les futurs qui donnent les détails importants pour intéressés. J'ai dû créer une copie de la fonction pour cette situation, ce que l'on tente le plus osuvent d'éviter.

    Alors, si tu acceptes de fouiller dans la classe du core, tu me diras, je te dirigerai. Qui sait, peut-être que nos collègues auront une meilleure idée, te permettant de laisser tout intact.

    À suivre
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    décembre 2015 modifié
    @cher collégue,

    Il me semble que modifier la fonction PlxMotor::prechauffage serait plus pertinent. En effet, en mode article cette fonction appelle une autre fonction getArticles() sans paramètre et pour cette dernière le paramètre est "before".
    Donc, utiliser la fonction getArticles avec le paramètre 'all' comme ci-dessous devrait suffire à récupérer tous les articles :
    [== PHP ==]
    public function prechauffage() {
    	.....
    		elseif($this->get AND preg_match('/^article([0-9]+)\/?([a-z0-9-]+)?/',$this->get,$capture)) {
    			$this->mode = 'article'; # Mode article
    			$this->template = 'article.php';
    			$this->cible = str_pad($capture[1],4,'0',STR_PAD_LEFT); # On complete sur 4 caracteres
    			$this->motif = '/^'.$this->cible.'.((?:[0-9]|home|,)*(?:'.$this->activeCats.'|home)(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/'; # Motif de recherche
    			if($this->getArticles('all')) {
    				# Redirection 301
    				if($this->plxRecord_arts->f('url')!=$capture[2]) {
    					header('Status: 301 Moved Permanently', false, 301);
    					header('Location: '.$this->urlRewrite('?article'.intval($this->cible).'/'.$this->plxRecord_arts->f('url')));
    					exit();
    				}
    			} else {
    				$this->error404(L_UNKNOWN_ARTICLE);
    			}
    		}
    .....
    

    Cordialement
  • Ah, je savais bien que nos artistes crocheteurs nous trouveraient une solution!

    Comme prévu, je n'y comprend pas grand chose mais je n'en suis pas malheureux pour autant. Si ça marche, à quoi bon!

    Merci bazooka07
  • merci pour vos réponse

    jai fait un copier/coller de ton script, bazooka07, dans le fichier class.plx.motor.php ligne150
    je créer un article avec la date 12/03/2016 , mais il n y a pas mon article
    peut être que c'est moi qui fais faux?( surement )
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    décembre 2015 modifié
    @Dudy,

    Effectivement, ce n'est pas suffisant.
    Dans la page d'accueil, on est en mode home.
    Laisse la modif dans prechauffage et modifie l'appel de getArticles vers la ligne 291 dans PlxMotor::demarrage :
    [== PHP ==]
    	public function demarrage() {
    ....
    		if($this->mode == 'home' OR $this->mode == 'categorie' OR $this->mode == 'archives' OR $this->mode == 'tags') {
    			$this->getPage(); # Recuperation du numéro de la page courante
    			if(!$this->getArticles('all')) { # Si aucun article
    				$this->error404(L_NO_ARTICLE_PAGE);
    			}
    		}
    
    Voir la démo ici : http://jeveuxpartir.free.fr/pluxml/ (histoires de ponts publié le 12/03/2016)
    Marche aussi si on clique sur une catégorie

    Normalement c'est "crocheté" ;)
  • Merci @bazooka bravo
    marche super bien dans la partie Blog, mais puisque moi j'ai crée une pagestatic-template(static-event.php) ou je récupère mes articles événement à venir qui font parti de la catégorie Tournée avec ce script :
    [== PHP ==]
    	<?php $plxShow->lastArtList($format='
    	   			<div class="element-item  text-center">
    	   			<div class="data"><h4><strong><span>#num_day <span>#short_month #num_year(4)</span></strong></h4></div>
    	   			<div class="title">	   			
    	   			<h4>#art_title</h4>
    	   			</div>
    	   			<div class="desc">
    	   				<h4>#art_content</h4>
    	   				</div>
    	   				<input type="submit" class="white" value="Buy Tickets">
    		 </div> ' ,30,002); ?>
    
    
    ça n'a pas l'air de marcher,
    désolé, je n'ai pas bien présenté ma question, je ne sais pas si c'est faisable
    PS si jamais j'ai remarqué sur ton lien que dans la catégorie Galerie tu as 2 articles et il n'en compte que 1 :-)
  • Salut Dudy,

    Est-ce que par hasard, ce ne serait pas un plugin (ou une fonctionnalité externe) "agenda/calendrier" qu'il te faut pour enregistrer les dates de tes concerts à venir et faire simplement un renvoi vers ce concert depuis l'article ?

    Car je suppose que tu veux quand même prévenir à l'avance via un article que le concert aura lieu dans une date future ?
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @Dudy,

    Il y a une autre modif à faire pour PlxShow::lastArtList() à la ligne 863, remplacer before par all :
    [== PHP ==]
    		# Nouvel objet plxGlob et récupération des fichiers
    		$plxGlob_arts = clone $this->plxMotor->plxGlob_arts;
    		if($aFiles = $plxGlob_arts->query($motif,'art',$sort,0,$max,'all')) {
    ....
    

    Si tu utilises un plugin pour afficher une vignette avec lastArtList, il faut aussi modifier le plugin.

    Pour le nombre erroné d'articles dans les catégories, il faut que je cherche un peu plus.

    Il faudrait qu'on puisse passer un paramètre à $plxShow pour éviter de faire ces modifications à chaque fois.
  • @kowalsky
    ça serait une bonne idée, mais je ne sais même pas commencer pour créer un plugins, il faut que je me mets
    je mets 2 images pour vous faire comprendre mon problème
    premier photo faite sur une page statique tout en html
    page.png
    et celle ci article avec LastArtList
    blog.png
    on ne peux pas faire 3 concert la même date dans 3 lieux différent :D :D
  • @bazooka
    merci je vais voir ce que ça donne avec ta manipulation
    en effet je n'ai pas de plugins pour le moment, je crois que je vais utiliser le tien champPlus
    je vous tien au courant
  • @bazooka
    en parlant de ChamPlus j'ai une idee, je ne l'ai pas encore essayé, mais si par exemple on avait un champ date aussi dans le parametre
    moi je pourrait récupérer la date que je décide et l'appeler avec lastartlist, ou d'une autre façon en effacent la date de création de l'article
    exemple :
    [list=*]
    [*]Champ date a venir DATE[/*]
    [*]Champ title tourné TEXTE[/*]
    [*]media si c est le cas IMAGE[/*]
    [*]et le reste dans art_content[/*]
    [/list]
    si c est faisable on éviterais de toucher au core, parce que je suppose que pour les mises a jour il faudrait tout réécrire
    est ce que c'est une mauvaise idée?
    merci a+
  • kowalskykowalsky Member
    décembre 2015 modifié
    Dudy a écrit:
    on ne peux pas faire 3 concert la même date dans 3 lieux différent :D :D

    Techniquement parlant si ce n'est pas au même instant, c'est faisable avec un simple équipement de téléportation miniaturisé ;)

    Sinon pour revenir à ton besoin, je te propose l'utilisation du plugin Champlus car il me semble qu'il peut t'être utile.

    Sur l'exemple que tu donnes en image, j'en déduis que tu veux mettre en avant une "date", mais pas forcément celle de l'article. En rajoutant un champ "date du concert" à ton article, tu as alors la possibilité de choisir librement une date future et de l'afficher dans ton article sans te soucier de la date de publication de celui-ci.

    Et plus avec les fonctionnalité additionnelles du plugin, tu peux rajouter d'autres champs, comme par exemple le lieu, qui te permettrons de créer des filtres pour tes lecteurs.

    Qu'en penses-tu ?

    (édit : ah ben le temps d'écrire ma proposition, tu as eu la même idée) :)

    Par contre utilise le hook de champlus pour intégrer cela dans tes articles. Il te suffit alors juste de modifier le template de tes articles.
  • merci kowalsky
    voilà j'ai eu la même idée :D
    je vais installer ChamPlus en espérant que ce n'est pas trop compliqué
    A+
  • Dudy a écrit:
    je vais installer ChamPlus en espérant que ce n'est pas trop compliqué

    Tu vas vexer bazooka07 ;)
  • les élevés font souvent vexer les prof's ;)
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @kowalsky,

    ]:D ]:D ]:D

    @Dudy,
    Pour avoir le bon nombre d'articles par catégorie, il faut encore faire 2 petites modifs :

    Dans PlxMotor::getCategories(...), remplacer before par all à la ligne 449 comme ci-dessous:
    [== PHP ==]
    # Recuperation du nombre d'article de la categorie
    $motif = '/^[0-9]{4}.[home,|0-9,]*'.$number.'[0-9,]*.[0-9]{3}.[0-9]{12}.[A-Za-z0-9-]+.xml$/';
    $arts = $this->plxGlob_arts->query($motif,'art','',0,false,'all');
    $this->aCats[$number]['articles'] = ($arts?sizeof($arts):0);
    

    Dans PlxMotor::getActiveArts(), mettre les lignes en commentaire comme ci-dessous pour ne pas tester la date :
    [== PHP ==]
    public function getActiveArts() {
    	if($this->plxGlob_arts->aFiles) {
    		$datetime=date('YmdHi');
    		foreach($this->plxGlob_arts->aFiles as $filename) {
    			if(preg_match('/^([0-9]{4}).(?:[0-9]|home|,)*(?:'.$this->activeCats.'|home)(?:[0-9]|home|,)*.[0-9]{3}.([0-9]{12}).[a-z0-9-]+.xml$/', $filename, $capture)) {
    				# if($capture[2]<=$datetime) { # on ne prends que les articles publiés
    					$this->activeArts[$capture[1]]=1;
    				# }
    			}
    		}
    	}
    }
    
    Bon je pense avoir fait le tour de la question. Voir démo ici : http://www.jeveuxpartir.net/pluxml/

    Cela doit répondre à ta demande mais ce n'est pas la meilleure méthode.
    Tu fais une confusion entre la date de publication et la date d'événement.
    Je suppose que tu publies tes dates de concert plusieurs mois à l'avance. Mais ce que tu veux c'est pouvoir épingler des articles, c'est à dire que les anciens articles qui concernent des concerts à venir soient toujours affichés en premier.
    Cela manque à la version actuelle de Pluxml et ce n'est pas encore dans les tuyaux pour la future version.
    C'est faisable en ajoutant une catégorie spéciale, je l'ai déjà fait pour un site mais il faut beaucoup modifier de motifs de recherche pour les articles (attention expressions régulières à donf: âmes sensibles s'abstenir :/ )

    Tu auras sûrement besoin de chamPlus mais cela ne fera pas le tri.

    A++
  • voici mes manipulations
    activé le plugins ChamPlus
    j'ai créer mon champ "date"
    j'ai rajouter la date dans mon article
    j'ai coché Activé le hook plxShowLastArtList et pageStatique ( oui ou non ??? )
    et j'ai ajouter #cps_date dans mon script
    [== PHP ==]
    ?php $plxShow->lastArtList($format='
    	   			<div class="element-item text-center">
    	   			<div class="data"><h4><strong><span>#cps_date</span></strong></h4></div>
    	   			<div class="title">	   			
    	   			<h4>#art_title</h4>
    	   			</div>
    	   			<div class="desc">
    	   				<h4>#art_content</h4>
    	   				</div>
    	   				<input type="submit" class="white" value="Buy Tickets">
    		 </div> ' ,8,002); ?>
    
    mais dans mon cercle date j'ai #cps_date
    j'ai le title mais plus le #art_content
    ??
    ou est l'erreur??
    merci
  • bazooka07 a écrit:



    @Dudy,

    Tu fais une confusion entre la date de publication et la date d'événement.
    Je suppose que tu publies tes dates de concert plusieurs mois à l'avance. Mais ce que tu veux c'est pouvoir épingler des articles, c'est à dire que les anciens articles qui concernent des concerts à venir soient toujours affichés en premier.

    A++
    je ne fais pas de confusion avec les dates, j'aimerais juste avoir une page ou je puisse afficher les dates des concerts à venir pas plus que 12, 1 date par mois dans la catégorie Tourné, la date de publication de l'article ce n'est pas importante,
    concernant les anciens articles je crois de les effacer de la page une fois l’événement passé et archiver tout ça

    une chose à la fois :D
    en tout cas chamPlus il à l'air bien si j'arrive a avoir ce que je demande
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    décembre 2015 modifié
    @Dudy,

    Epingler des articles aurait pu être une bonne solution pour tes tournées. Mais pour l'instant Pluxml ne le fait pas.

    Par défaut, Pluxml trie les articles par date décroissante.

    Mais puisque tu utlises lastArtList, on peut utiliser une astuce que quelqu'un a indiqué récemment.
    Il faut que le titre de tes articles commencent par l'année, le mois et le jour de la date de concert dans cet ordre :
    [== Indéfini ==]
    16/03/26 Stade de France - Paris
    16/05/12 Los Angelès
    16/06/06 Stadio San Siro - Milano
    

    Tu mets les prochains concerts dans une catégorie "A venir" et tu notes le numéro de la catégorie XX
    Et pour afficher les prochains concerts triés par date, tu peux faire :
    [== PHP ==]
    $format='<li>....</li>';
    $max = 12;
    $cat_id='XX';
    $sort = 'alpha';
    $plxShow->lastArtList($format $max ,$cat_id, '', $sort );
    

    Notes que les concerts peuvent être dans plusieurs catégories, pays par exemple.
    Tu peux également créer un template par catégorie.

    Et quand un concert est passé, tu le retires de la catégorie "A venir".

    A++
  • Je suis de retour, bon sang, quelle galère, je suis spectateur mais je reviens au fait que j'ai très simplement retiré la restriction qui "empêche" les "futurs" articles de s'afficher, comme le décrit bazooka07. Il faut ensuite être vigilant parce que cette nouvelle règle s'applique à toutes les utilisations de lastArtList mais c'est quand même rare pour nous d'écrire un article que l'on veut publier plus tard. C'est un caprice de journaliste plus qu'autre chose.

    Ensuite, tout est permis, j'utilise la boucle WHILE pour pomper la totalité des articles et je fais le tri en vérifiant si la date est passée ou future. L'application n'est pas encore en ligne mais je peux vous donner l'aspect visuel qui est déjà autorisé, vous en avez un exemple exact au

    http://www.jaeurope.org/events-list/upcoming-events.html

    avec une lecture différente pour le passé et le futur. On permute avec les boutons pour recalculer et afficher la nouvelle liste. Je voulais les mettre sur la même page en "grisant" les anciens mais on a préfére garder bien en vue les passés pour fournir un lien "souvenir". Voilà mon grain de sel.
  • DudyDudy Member
    décembre 2015 modifié
    @bazooka07
    bonjour
    oui j'ai déjà utilisé cette astuce mais avec le prénom par ordre alphabétique pour un autre site,
    disons que maintenant j'ai plusieurs solutions que je pourrais utiliser, mais je suis curieux de savoir pourquoi ton plugin ChamPlus ne marche pas avec mes manipulations(je rappel que j'utilise une page static,dans la partie Blog,article.php, c'est bon j'ai mon article) je ne sais pas si tu as remarqué mon message (#18)
    merci bazooka belle journée
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @Dudy,

    Je ne suis pas sûr d'avoir bien compris.
    Tu utilises $plxShow->lastArtList(...) dans une page statique ?
    Si c'est le cas, j'avoue ne pas avoir tester.

    A++
  • @bazooka
    merci
    je vais poster dans la section plugin concernant ChamPlus, j'aimerais bien comprendre comment utiliser ce plugin pour les page statiques et comment récupérer le champ avec lasArtList

    a+
  • bonjour
    j'ai décidé pour l'option la plus simple
    mettre la date a venir dans le chapeau et l'afficher avec #art_chapo,

    de toute façon je dois l’écrire à quelque part cette date :D

    en tout cas merci pour votre aide précieux
Connectez-vous ou Inscrivez-vous pour répondre.