THELIA Forum

Welcome to the THELIA support and discusssion forum

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)