Forum CMS Made Simple FR
[RESOLU] Peut-on formater le texte du titre d'une news? - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Général (https://forum.cmsmadesimple.fr/forum-3.html)
+--- Forum : Général (https://forum.cmsmadesimple.fr/forum-10.html)
+--- Sujet : [RESOLU] Peut-on formater le texte du titre d'une news? (/thread-4028.html)



[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 12/06/2017

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 2.1.6
#~ Url du site : http://www.evolution-biologique.org/
#~ Hébergeur / Soft : OVH
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 2.1.6
#~ Installed Modules:
#~ AceEditor: 1.0
#~ AdminSearch: 1.0.2
#~ AjaxMadeSimple: 0.4.0
#~ CGExtensions: 1.53.17
#~ CGFeedMaker: 1.0.20
#~ CGSimpleSmarty: 2.0
#~ CGSmartImage: 1.21.5
#~ CMSContentManager: 1.1.4
#~ CMSMailer: 5.2.14
#~ CodeMirror: 3.0.0
#~ DesignManager: 1.1.1
#~ DocumentSearch: 1.4.5
#~ DownCnt: 2.5.0
#~ FileManager: 1.5.2
#~ Gallery: 2.2
#~ MenuManager: 1.50.2
#~ MicroTiny: 2.0.3
#~ ModuleManager: 2.0.5
#~ ModuleXtender: 1.10.6
#~ Navigator: 1.0.3
#~ News: 2.50.6
#~ NewsSlides: 1.4
#~ Polls: 1.1.0
#~ Printing: 1.0.4
#~ Quizzard: 0.9
#~ Search: 1.50.2
#~ Showtime: 3.4
#~ SiteMapMadeSimple: 1.2.8
#~ Slide: 1.0
#~ Statistics: 1.1.3
#~ ThemeManager: 1.1.8
#~ TinyMCE: 2.9.12
#~ UsersGuide: 1.8.1
#~ Config Information:
#~ php_memory_limit:
#~ max_upload_size: 128000000
#~ url_rewriting: mod_rewrite
#~ page_extension: .html
#~ query_var: page
#~ auto_alias_content: true
#~ locale:
#~ set_names: true
#~ timezone: Europe/Paris
#~ permissive_smarty: false
#~ Php Information:
#~ phpversion: 7.0.15
#~ md5_function: On (Vrai)
#~ json_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_ALL: 32759
#~ E_STRICT: 2048
#~ E_DEPRECATED: 8192
#~ test_file_timedifference: Aucune différence de date du système trouvée
#~ test_db_timedifference: Aucune différence de date du système trouvée
#~ create_dir_and_file: 1
#~ memory_limit: 512M
#~ max_execution_time: 300
#~ register_globals: Off (Faux)
#~ output_buffering: 4096
#~ disable_functions: _dyuweyrj4, _dyuweyrj4r, dl
#~ open_basedir:
#~ test_remote_url: Valable
#~ file_uploads: On (Vrai)
#~ post_max_size: 64M
#~ upload_max_filesize: 128M
#~ session_save_path: /tmp (0700)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ xmlreader_class: On (Vrai)
#~ check_ini_set: On (Vrai)
#~ curl: On
#~ Performance Information:
#~ allow_browser_cache: Off (Faux)
#~ browser_cache_expiry: 6000
#~ php_opcache: On (Vrai)
#~ smarty_cache: Off (Faux)
#~ smarty_compilecheck: Off (Faux)
#~ smarty_cache_udt: Off (Faux)
#~ auto_clear_cache_age: On (Vrai)
#~ Server Information:
#~ Server Software: Apache
#~ Server Api: fpm-fcgi
#~ Server Os: Linux 3.14.79-grsec-hosting-web-3.14 On x86_64
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.5.55
#~ Server Db Grants: Impossible de trouver un privilège "GRANT ALL". Cela ne conduit pas nécessairement à des problèmes... Mais si vous avez des problèmes pour installer/retirer des modules ou ajouter/supprimer des éléments de contenu ou pages cela pourrait en être la cause.
#~ Permission Information:
#~ tmp: /home/evolutionk/www/tmp (0705)
#~ tmp_cache: /home/evolutionk/www/tmp/cache (0705)
#~ templates_c: /home/evolutionk/www/tmp/templates_c (0705)
#~ modules: /home/evolutionk/www/modules (0505)
#~ uploads: /home/evolutionk/www/uploads (0505)
#~ Masque de création de fichier (umask) : /home/evolutionk/www/tmp/cache (0705)
#~ config_file: 0404
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~

Bonjour,


Si j'écris " <i>Homo naledi</i>, une nouvelle espèce du genre humain " lors de l’édition dans le titre d'une news pour avoir du texte en italique, j'obtiens exactement la même chose sur le frontend et pas de texte en italique. Je m'y prends mal ou ce n'est pas possible?
Merci d'avance.


[RESOLU] Peut-on formater le texte du titre d'une news? - airelibre - 13/06/2017

Bonjour,

peux-tu nous donner le gabarit d'affichage du titre de l'actu ?

Merci


[RESOLU] Peut-on formater le texte du titre d'une news? - jissey - 13/06/2017

Bonjour,
tu devrais mettre un délimiteur genre $$ puis l'extraire et l'encadrer des balises html.
Si le texte en italique est toujours au début, ton titre sera :
Homo naledi$$, une nouvelle espèce du genre humain
Et dans le gabarit :
Code :
[== Smarty ==]
{$titre = "$$"|explode:$entry->title}
{if $titre[0]}
<i>{$titre[0]</i>
{/if}
{$titre[1]}



[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 14/06/2017

Merci,

Donc si je comprends bien on ne peux pas utiliser directement une balise html dans un titre, contrairement au sommaire et au contenu


[RESOLU] Peut-on formater le texte du titre d'une news? - airelibre - 14/06/2017

Tente sinon en modificateur
Code :
|unescape
sur la variable du titre


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 14/06/2017

Airelibre m'a mis sur la voie: dans le gabarit j'avais

Code :
<div class="NewsSummaryLink "><a  href="{$entry->moreurl}" title="{$entry->title|cms_escape:htmlall}">{$entry->title|cms_escape}</a></div>

en remplaçant par
Code :
<div class="NewsSummaryLink "><a  href="{$entry->moreurl}" title="{$entry->title|cms_escape:htmlall}">{$entry->title|cms_escape}</a></div>

J'ai les italiques dans le titre mais le title du lien à une drôle de tête avec ses <i> et </i> et le liens vers le détail de l'article est encore plus zarbi :
... news/43/280/iHomo-naledii-une-nouvelle-espèce-du-genre-humain/d,News-Detail-actualites.html
avec les i des balises conservés. Il faudrait filtrer pour enlever les balises html? Rolleyes Sad
Je crois que je vais faire l'impasse sur cette convention de biologie.


[RESOLU] Peut-on formater le texte du titre d'une news? - airelibre - 14/06/2017

D'où ma demande de gabarit au départ Wink

Je pense que tu as du faire une erreur de copier / coller car on a deux fois le même code dans ton message.

A mon avis il faut juste supprimer le cms_escape :

Code :
{$entry->title}

Pour le title, là il faut faire

Code :
{$entry->title|strip_tags}

Ca devrait résoudre ton problème.

De manière générale pour mes projets, si j'ai besoin d'une particularité, je définis un caractère spécial du type | @ etc... et je fais un remplacement après quelques tests / recherches dans Smarty.


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 14/06/2017

effectivement il y a une erreur de copier coller, avec ta dernière correction on obtient :

Code :
<div class="NewsSummaryLink "><a  href="{$entry->moreurl}" title="{$entry->title|strip_tags}">{$entry->title}</a></div>

là c'est parfait sauf pour l'adresse du détail de l'article. Mais pour le corriger il faut modifier le code je pense.


[RESOLU] Peut-on formater le texte du titre d'une news? - airelibre - 14/06/2017

Sur le lien détail c'est assez mystérieux car tu n'appliques aucun modificateur sur $entry->moreurl n'est-ce pas ?

Tiens-nous au courant de la suite


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 14/06/2017

Je parle du lien qui s'affiche dans la barre du navigateur :

http://localhost/cmsmadesimple/news/43/280/iHomo-naledii-une-nouvelle-esp%C3%A8ce-du-genre-humain/d,News-Detail-actualites.html

les < /> ont été supprimé mais pas les i. Je ne pense pas que l'on puisse modifier ça dans le gabarit. Je continue à creuser la question.


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 14/06/2017

l'adresse href="{$entry->moreurl}" est bien celle qui s'affiche dans la barre du navigateur (normal)

moreurl est créé par la fonction CreateLink à la ligne 320 de modules\News\action.detail.php

Code :
[== PHP ==]
$onerow->moreurl = $this->CreateLink($id, 'detail', $detailpage!=''?$detailpage:$returnid, $moretext, $sendtodetail, '', true, false, '', true, $prettyurl);

la fonction dans lib\classes\class.CMSModule.php

Code :
[== PHP ==]
function CreateLink($id, $action, $returnid='', $contents='', $params=array(),
                        $warn_message='', $onlyhref=false, $inline=false, $addttext='',
                        $targetcontentonly=false, $prettyurl='')
    {
        $this->_loadFormMethods();
        return cms_module_CreateLink($this, $id, $action, $returnid, $contents, $params, $warn_message, $onlyhref, $inline, $addttext, $targetcontentonly, $prettyurl);
    }

Si je suis bien tout se passe dans $moretext qui est créé quelques lignes plus haut. Bon je crois que c'est pour Robert Smile sauf à réécrire l'adresse dans le gabarit ce qui est un peu casse gueule.


[RESOLU] Peut-on formater le texte du titre d'une news? - airelibre - 15/06/2017

En fait je n'avais pas bien compris au départ, mais c'est bien le fait d'ajouter les <i> sur le titre qui génère une URL avec des "i" ce qui est logique.

Dans ce cas, il vaudrait peut être mieux partir sur un caractère séparateur à repérer dans l'URL pour le supprimer (et le remplacer dans le formatage du bouton du lien pour avoir la mise en forme souhaitée).

Tu peux aussi directement réecrire l'URL à la volée en suivant bien le format prévu pour la route. Regarde les fonctions de gestion des routes dans le fichier principal du module News.


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 15/06/2017

Après une nuit de sommeil, je me suis réveillé avec une solution : supprimer les balises html avant la création des pretty url

dans le fichier modules\News\action.detail.php en modifiant les lignes 303 à 308

code d'origine

Code :
[== PHP ==]
$prettyurl = $row['news_url'];
          if( $prettyurl == '' ) {
              $aliased_title = munge_string_to_url($row['news_title']);
              $prettyurl = 'news/'.$row['news_id'].'/'.($detailpage!=''?$detailpage:$returnid)."/$aliased_title";
              if (isset($sendtodetail['detailtemplate'])) $prettyurl .= '/d,' . $sendtodetail['detailtemplate'];
          }

modification

Code :
[== PHP ==]
$prettyurl = $row['news_url'];
echo ($row['news_title']);
          if( $prettyurl == '' ) {
    $aliased_title = strip_tags($row['news_title'])    ;
            $aliased_title = munge_string_to_url($aliased_title);

              $prettyurl = 'news/'.$row['news_id'].'/'.($detailpage!=''?$detailpage:$returnid)."/$aliased_title";
              if (isset($sendtodetail['detailtemplate'])) $prettyurl .= '/d,' . $sendtodetail['detailtemplate'];
          }

J'ai décortiqué la fonction munge_string_to_url, elle ne supprime pas les balises html mais seulement les / < > d'où le nettoyage incomplet de l'url.


[RESOLU] Peut-on formater le texte du titre d'une news? - airelibre - 15/06/2017

Oui mais nous déconseillons très fortement la modification du code du cœur car chaque mise à jour sera écrasée Wink A éviter dans tous les cas.

Après, c'est toi qui voit Wink


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 15/06/2017

Oui je sais tout ça, plus d'éventuel dégâts collatéraux imprévus... Il y a aussi la solution de proposer la modification aux développeurs ceci d'autant plus que je viens de me rendre compte que le problème existe aussi pour les titres des pages de contenus. C'est la fonction munge_string_to_url qui aurait besoin d'intégrer le nettoyage des balises en fait


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 15/06/2017

Pour utiliser des balises html dans le titre d'une page il faut :

modifier le gabarit de la page en remplaçant {{title} par {{title}|unescape}, mais j'ai pas réussi en enlever les <i> du titre de la page html avec
<title>{{title}|strip_tags} - {sitename}</title>

et les gabarits de menu en remplaçant :{$node->menutext} par {{$node->menutext}|unescape}


[RESOLU] Peut-on formater le texte du titre d'une news? - airelibre - 15/06/2017

Plus court :

Code :
{title|strip_tags}

Le modificateur peut être appliqué sur une variable ou un plugin directement en sortie.

Cela dit, tu devrais pouvoir enlever des tags n'importe où y compris dans <title></title> - vérifie bien que ce sont des tags que tu as et non pas une version encodée pour les URL


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 15/06/2017

ouhe tu as raison c'était ça du coup le bon code est

Code :
[== Indéfini ==]
{assign var="title_clean" value= {title}}
{$title_clean=$title_clean|unescape}
<title> {$title_clean|strip_tags} - {sitename}</title>



[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 15/06/2017

Une tentative de nettoyage de l'adresse dans le gabarit :

Code :
[== Indéfini ==]
{$posfin={$entry->moreurl}|strpos:"/d,"}
{$fin={$entry->moreurl}|substr :$posfin}
{$debut={$entry->moreurl}|substr:0:$posfin}
{$posdebut=$debut|strrpos:"/"}
{$posdebut=$posdebut+1}
{$debut=$debut|substr:0:$posdebut}
{$titre_clean=$entry->title|strip_tags}
{$titre_clean=$titre_clean|munge_string_to_url}
{$correction=$titre_clean|strpos:"-"}
{if $correction==0}
{$titre_clean=$titre_clean|substr:1}
{/if}
<div class="NewsSummaryLink "><a  href="{$debut}{$titre_clean}{$fin}" title="{$entry->title|strip_tags}">{$entry->title}</a></div>

En l'état c'est pas du tout pratique puisqu'il faut le faire dans tous les gabarits.


[RESOLU] Peut-on formater le texte du titre d'une news? - airelibre - 16/06/2017

mhhh ca m'a l'air bien compliqué Smile Je serai d'avis dans ce cas de laisser tomber les <i> </i> dans le titre au profit d'un caractère spécial plus simple à gérer.

Tu peux aussi traiter toi-même l'URL de détail à la main dans ton gabarit de sommaire grâce aux ID / returnid et au titre sur lequel tu pourras appliquer un strip_tags. Si tu définis au départ ton returnid dans les paramètres du module Articles / News ca fera déjà ca en moins à passer dans l'URL. Idem pour le gabarit de détail, à mon souvenir ce paramètre n'est pas obligatoire (regarde dans la classe principale du module News au niveau des routes pour voir les formats d'URL possibles).

Tu peux aussi gérer une fonction de génération d'une URL côté backoffice lors de l'édition d'une actu (pré-remplissage du champ URL) mais c'est plus complexe.

Tu peux aussi et enfin définir un nouveau champ de titre et indiquer que le titre principal c'est le titre "SEO / URL" et que le titre formaté doit être saisi dans un autre champ.

Voilà pour les pistes que je vois pour essayer de simplifier cette problématique - bon courage !


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 16/06/2017

airelibre a écrit :Tu peux aussi traiter toi-même l'URL de détail à la main dans ton gabarit de sommaire grâce aux ID / returnid et au titre sur lequel tu pourras appliquer un strip_tags. Si tu définis au départ ton returnid dans les paramètres du module Articles / News ca fera déjà ca en moins à passer dans l'URL. Idem pour le gabarit de détail, à mon souvenir ce paramètre n'est pas obligatoire (regarde dans la classe principale du module News au niveau des routes pour voir les formats d'URL possibles).

euh là ça dépasse largement mes capacités sur CMS et en plus le problème ne concerne pas que les news mais aussi les pages standard. Il faudra qu'il soit réglé au niveau du code car en fait c'est dans la fonction "munge_string_to_url" que réside la solution.


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 16/06/2017

une UDT simplifiera le travail

Code :
[== PHP ==]
// paramètres d'entrée url,title; variable de sortie $cleanurl//
$url=$params['url'];$title=$params['title'];
$posfin=strpos($url,"/d,");
$fin=substr($url,$posfin);
$debut=substr($url,0,$posfin);
$posdebut=strrpos($debut,"/",0);
$posdebut=$posdebut+1;
$debut=substr($debut,0,$posdebut);
$titre_clean=strip_tags($title);
$titre_clean=munge_string_to_url($titre_clean);
$correction= strpos($titre_clean,"-");
if ($correction==0)
{
$titre_clean=substr($titre_clean,1);
}
$cleanurl.= $debut.$titre_clean.$fin;
return $cleanurl;

et dans le gabarit
Code :
[== HTML ==]
<div class="NewsSummaryLink "><a  href="{clean_url url=$entry->moreurl title=$entry->title}" title="{$entry->title|strip_tags}">{$entry->title}</a></div>



[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 16/06/2017

Pour les pages la solution est plus simple puisqu'il suffit de corriger l'alias.


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 16/06/2017

Je viens de tester avec un caractère spécial, tu as raison Airelibre c'est beaucoup plus simple, merci pour l'idée. J'ai remplacé <i> </i> par <@> </@>, l'adresse est propre et {$entry->title|replace:'@>':'i>'} suffit à recréer les italiques du titre.


[RESOLU] Peut-on formater le texte du titre d'une news? - archeo - 17/06/2017

J'ai posé le problème de cet url mal nettoyé sur la forge:
Citation :"I had to insert the html <i> </ i> tags in the title of a news in respect of a convention of writing the names of species in biology. With a correct template everything works fine except the pretty url.
my example :

<i>Homo naledi</i>, une nouvelle espèce du genre humain

The url :

http://localhost/cmsmadesimple/news/43/280/iHomo-naledii-une-nouvelle-espèce-du-genre-humain/d,News-Detail-actualites.html

Note the "i" before and after Homo naledi

The Url tag is not totally erase"


La réponse de Robert Campbell

Citation :"Putting HTML tags in your title is not supported. Besides having to play with
the {title} tag you will also have problems with things like RSS Feeds, and
social media links, emails etc.

It would be better to use a separate field called 'display_title' or something
like that that has the HTML tags in them."

Donc pas de balises Html dans les titres sinon il faut assumer les soucis qui en découlent. Je viens de constater que les lecteurs de flux RSS considèrent qu'une news n'a pas de titre si celui ci contient une balise html.