Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[RESOLU] Peut-on formater le texte du titre d'une news?
#1

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.

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#2

Bonjour,

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

Merci
#3

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]}

{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#4

Merci,

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

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#5

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

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.

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#7

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.
#8

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.

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#9

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
#10

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

http://localhost/cmsmadesimple/news/43/2...lites.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.

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#11

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.

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#12

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.
#13

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.

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#14

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
#15

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

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#16

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}

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#17

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
#18

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>

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#19

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.

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#20

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 !
#21

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.

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#22

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>

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#23

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

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#24

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.

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
#25

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/2...lites.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.

MS-Dos, Gem, geoworks, Windows 1, 2, 3, 3.1, 95, 98, XP, seven, 8, 10 Smile
Mac system 1 à 6
Wampserver 3.1.9,
PhP 7.3.5,
CMS version 2.2.11
Sujet fermé


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)