Изменение Формата Ссылок Модуля Seo

Сейчас в модуле seo есть такие шаблоны для url:

/category-name/[subcategory-name/]product-name

/category-name/[subcategory-name/]product-name.html

Подскажите, как можно сделать url вида:

/category-name/product-name , т.е. удалить из url подкатегории. category-name - это главная категория товара

1 лайк

К сожалению, несколькими строчками кода тут не обойтись

Это понятно, подскажите тогда ка лучше поступить: Изменить модуль seo (В настройку Формат SEO URL товаров добавить новый пункт с нужным форматом url и написать код в этом модуле для новых url) или написать отдельный аддон?

Хотя вот накидал пример, вроде работает.

Правим app\addons\seo\func.php

в функции fn_seo_validate_parents после строки

 $parent_ids = is_array($id_path) ? $id_path : explode('/', $id_path);

добавляем

if (!empty($parent_ids) && $vars['parent_type'] == 'c') {
	$parent_ids = array(array_shift($parent_ids));
}

в функции fn_seo_get_parent_items_path после строки

$path_ids = explode('/', $id_path);

добавляем

if ($object_type == 'p' && !empty($path_ids)) {
	$path_ids = array(array_shift($path_ids));
}

Спасибо за решение. Но мне бы хотелось не заменять функционал, а расширить существующее. Если заменить функционал - то проще сделать так:

В файле /app/addons/seo/schemas/settings/objects.php

$path = db_get_hash_single_array(
                "SELECT c.id_path, p.link_type FROM ?:categories as c LEFT JOIN ?:products_categories as p ON p.category_id = c.category_id WHERE p.product_id = ?i ?p",
                array('link_type', 'id_path'),
                $object_id,
                fn_get_seo_company_condition('c.company_id', '', $company_id)
            );

Вот тут SELECT c.id_path, заменить на SELECT c.category_id as id_path

Если хотите изменить схему этого файла, сипользуйте модуль Мои изменения и создайте следующий файл

app\addons\my_changes\schemas\seo\objects.post.php

с содержимым:

<?php

<манипуляции с массивом $schema>

return $schema;

Не забудьте очистить кэш после изменений

Спасибо, это будет лучшим решением

как можно поменять в модуле СЕО автоматическое формирование названия title страницы?

сейчас это так Категория :: Подкатегория :: Название товара

нужно:

[название товара] [код] купить за [цена] в интернет магазине таком-то

сейчас все это делаю вручную

как можно поменять в модуле СЕО автоматическое формирование названия title страницы?

сейчас это так Категория :: Подкатегория :: Название товара

нужно:

[название товара] [код] купить за [цена] в интернет магазине таком-то

сейчас все это делаю вручную

Сейчас тайтл формируется из хлебных крошек в файле design\themes\ВАША_ТЕМА\templates\index.tpl

Попробуйте заменить:

{if $page_title}
    {$page_title}
{else}
    {foreach from=$breadcrumbs item=i name="bkt"}
        {if !$smarty.foreach.bkt.first}{$i.title|strip_tags}{if !$smarty.foreach.bkt.last} :: {/if}{/if}
    {/foreach}
    {if !$skip_page_title && $location_data.title}{if $breadcrumbs|count > 1} - {/if}{$location_data.title}{/if}
{/if}

на

{if $page_title}
    {$page_title}
{elseif $runtime.controller == 'products' && $runtime.mode == 'view'}
        {$product.product} {$product.product_code} купить за {$product.price} в интернет магазине таком-то
{else}
    {foreach from=$breadcrumbs item=i name="bkt"}
        {if !$smarty.foreach.bkt.first}{$i.title|strip_tags}{if !$smarty.foreach.bkt.last} :: {/if}{/if}
    {/foreach}
    {if !$skip_page_title && $location_data.title}{if $breadcrumbs|count > 1} - {/if}{$location_data.title}{/if}
{/if}

Не зубудьте почистить кэш

Если знакомы с хуками, то используйте index:title

(!) Не тестировано

Работает, спасибо!

Цена только показывается с копейками, типа 10.000000

Работает, спасибо!

Цена только показывается с копейками, типа 10.000000

Попробуйте

{if $page_title}
    {$page_title}
{elseif $runtime.controller == 'products' && $runtime.mode == 'view'}
        {$product.product} {$product.product_code} купить за {$product.price|fn_format_price} в интернет магазине таком-то
{else}
    {foreach from=$breadcrumbs item=i name="bkt"}
        {if !$smarty.foreach.bkt.first}{$i.title|strip_tags}{if !$smarty.foreach.bkt.last} :: {/if}{/if}
    {/foreach}
    {if !$skip_page_title && $location_data.title}{if $breadcrumbs|count > 1} - {/if}{$location_data.title}{/if}
{/if}

Спасибо, теперь все просто идеально!

Я так понимаю, что мне нужно это сделать модулем чтобы ваша обработка заработала после обновления?

Спасибо, теперь все просто идеально!

Я так понимаю, что мне нужно это сделать модулем чтобы ваша обработка заработала после обновления?

Да, желательно. Благо, что хук позволяет

А как сделать:

Product_name текст Category_name цена, текст, Vendor_Name

Можно ли еще подтянуть город Вендора в TITLE Товара?

А как сделать:

Product_name текст Category_name цена, текст, Vendor_Name

Можно ли еще подтянуть город Вендора в TITLE Товара?

Попробуйте

{if $page_title}
    {$page_title}
{elseif $runtime.controller == 'products' && $runtime.mode == 'view'}
        {$product.product} текст {$product.main_category|fn_get_category_name} {$product.price|fn_format_price}, текст, {$product.company_id|fn_get_company_name}
{else}
    {foreach from=$breadcrumbs item=i name="bkt"}
        {if !$smarty.foreach.bkt.first}{$i.title|strip_tags}{if !$smarty.foreach.bkt.last} :: {/if}{/if}
    {/foreach}
    {if !$skip_page_title && $location_data.title}{if $breadcrumbs|count > 1} - {/if}{$location_data.title}{/if}
{/if}

Не тестировали, для города нужны более серьезные изменения

Все круто! Спасибо.

А как для категорий сделать?

Название категории - текст - Родительская категория - тект

А как для категорий сделать?

Название категории - текст - Родительская категория - тект

Попробуйте

{if $page_title}
    {$page_title}
{elseif $runtime.controller == 'products' && $runtime.mode == 'view'}
        {$product.product} текст {$product.main_category|fn_get_category_name} {$product.price|fn_format_price}, текст, {$product.company_id|fn_get_company_name}
{elseif $runtime.controller == 'categories' && $runtime.mode == 'view'}
        {$category_data.category} текст {if $category_data.parent_id}{$category_data.parent_id|fn_get_category_name}{/if} текст
{else}
    {foreach from=$breadcrumbs item=i name="bkt"}
        {if !$smarty.foreach.bkt.first}{$i.title|strip_tags}{if !$smarty.foreach.bkt.last} :: {/if}{/if}
    {/foreach}
    {if !$skip_page_title && $location_data.title}{if $breadcrumbs|count > 1} - {/if}{$location_data.title}{/if}
{/if}

Попробуйте

{if $page_title}
    {$page_title}
{elseif $runtime.controller == 'products' && $runtime.mode == 'view'}
        {$product.product} {$product.product_code} купить за {$product.price|fn_format_price} в интернет магазине таком-то
{else}
    {foreach from=$breadcrumbs item=i name="bkt"}
        {if !$smarty.foreach.bkt.first}{$i.title|strip_tags}{if !$smarty.foreach.bkt.last} :: {/if}{/if}
    {/foreach}
    {if !$skip_page_title && $location_data.title}{if $breadcrumbs|count > 1} - {/if}{$location_data.title}{/if}
{/if}

Нужно просто в файле index.tpl поменять эти строки и очистить кэш?

если да то что то не работает - ничего не изменилось

Нужно чтобы Title имел вид Купить [название товара] в интернет магазине таком-то

В Редактирование товара - SEO - SEO / Мета-данные - Название страницы (информация автоматически пропишется или там будет пусто а Title будет изменен?)

если да то что то не работает - ничего не изменилось

Нужно чтобы Title имел вид Купить [название товара] в интернет магазине таком-то

В Редактирование товара - SEO - SEO / Мета-данные - Название страницы (информация автоматически пропишется или там будет пусто а Title будет изменен?)

Если у товара уже задан тайтл вручную, то не поменяется. Код сработает только для тех товаров, у кого не задан тайтл. Мета данные наш код не меняет