THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Je souhaite modifier la ré-écriture d'url dans le BO en ajoutant, devant le nom du produit, le chemin des rubriques parentes.

seo

Lignes 27 à 32 dans seo-tab.html il est écrit :

{custom_render_form_field field='url'}
            <div class="input-group">
                <span class="input-group-addon">{$url_language|default:{config key="url_site"} nofilter}/</span>
                <input type="text" {form_field_attributes field='url'}>
            </div>
{/custom_render_form_field}

J'ai identifié le fichier concerné (backOffice/montemplate/includes/seo-tab.html) et les lignes afférentes :

Lignes 27 à 32 dans seo-tab.html il est écrit :

{custom_render_form_field field='url'}
            <div class="input-group">
                <span class="input-group-addon">{$url_language|default:{config key="url_site"} nofilter}/</span>
                <input type="text" {form_field_attributes field='url'}>
            </div>
{/custom_render_form_field}

J'ai remarqué que "{form_field_attributes field='url'}" génère dans la balise input :

id="rewriten_url_field" name="thelia_seo[url]" value="1-31-champagne-bollinger.html" class="form-control " placeholder="Utilisez des mots clés dans votre URL"

De fait, on ne peut "concaténer" directement une variable ou du texte en écrivant par exemple : "toto/titi/tata/{form_field_attributes field='url'}" > Ça m'aurait arrangé de faire sans ré-écrire un module :-)

1 - Comment dois-je m'y prendre pour arriver à mes fins ? {form_field_attributes field='url'} > de quel module s'agit-il ?
2 - Existe-t-il dans Thelia une option/un outil qui permette de supprimer les numéro devant l'url ré-écrite ou dois-je y aller à coup de regex avec smarty ?

Merci pour l'éclairage du support smile

Last edited by anti-conformiste (03-07-2018 08:50:32)

Offline


C'est souvent quand je me décide à poser la question que je trouve une solution

Il suffit de ranger {form_field_attributes field='url'} dans une variable et de remplacer le champ value :

{assign var="url_seo" value={form_field_attributes field='url'}}
{custom_render_form_field field='url'}
            <div class="input-group">
                <span class="input-group-addon">{$url_language|default:{config key="url_site"} nofilter}/</span>
                {* <input type="text" {form_field_attributes field='url'}> *}
                <input type="text" {$url_seo|replace:"value=\"":"value=\"toto/" nofilter}>
            </div>
{/custom_render_form_field}

That's all !

Last edited by anti-conformiste (03-07-2018 08:50:02)

Offline


Je donne le code complet.
Objectif : ré-écrire l'url avec le champ SEO complété automatiquement avec le catégory path.
La problématique : je souhaite supprimer les accents, les nombres, les tirets apès les nombres, les espaces dans le nom et/ou le chemin des catégories. Il y a aussi le fait que {form_field_attributes field='url'} rappelle l'url courante ré-écrite. Il faut donc détecter si le path est déjà présent dans l'url, et dans ce cas, ne pas concaténer à nouver le category path sous peine de voir le chemin s'ajouter à chaque validation devant l'url existante.
Solution : utiliser des regex et un test conditionnel pour vérifier que le path n'existe pas dans l'URL ré-écrite.

{* Display error message if exist *}
        {include file='includes/notifications.html' message=$form_error_message alert_type="danger"}
        
        {assign var="url_seo" value={form_field_attributes field='url'}}
        
        {strip} {* Supprime les espaces entre chaque catégories *}
            {capture assign="ariane"}
                {loop type="category-path" name="chemin-seo" category="{category attr="id"}"}
                    {* Remplace les espaces dans le nom des catégories et remplace les accents *}
                    {$TITLE|replace:" ":"-"|escape:htmlall:'UTF-8'|regex_replace:'/&(.)(acute|grave|circ|uml|cedil|ring|tilde|slash);/':'\1'|replace:' ':'+'}/
                {/loop}
            {/capture}
        {/strip}

        {if strpos($url_seo, $ariane) !== false}
        {* l'URL contient déjà le chemin des catégories *}
        {* On récupère juste {form_field_attributes field='url'} pour éviter que le chemin ne se duplique à chaque validation du formulaire *}
            {custom_render_form_field field='url'}
                <div class="input-group">
                    <span class="input-group-addon">{$url_language|default:{config key="url_site"} nofilter}/</span>
                    <input type="text" {form_field_attributes field='url'}>
                </div>
            {/custom_render_form_field}
        {else}
            {custom_render_form_field field='url'}
                <div class="input-group">
                    <span class="input-group-addon">{$url_language|default:{config key="url_site"} nofilter}/</span>
                    {* <input type="text" {form_field_attributes field='url'}> *}
                    {* Supprime les nombres et les tirets *}
                    <input type="text" {$url_seo|replace:"value=\"":"value=\"{$ariane}"|regex_replace:"/[0-9]-[^-$]+-/":"" nofilter}>
                </div>
            {/custom_render_form_field}
        {/if}

Il s'agit la d'une solution. On peut très bien ré-écrie le module formulaire "thelia.admin.seo"

Last edited by anti-conformiste (03-07-2018 13:39:43)

Offline

Offline


Bonjour à tous,
se post est un peu vieux, vue les mise à jour
Ceci fonctionne toujours ?


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir... Thelia 2.4.4

Offline


Bonjour

Merci Anti-conformiste pour ton code
mais category-path ne prend pas en compte la langue sélectionnée (local du form)
le path renvoyé est pour la langue de la page sad