Ссылка на определенные текущие категории со страницы просмотра продукта


Текущий сценарий

Я пытаюсь вернуться к текущей категории продукта на самих страницах продукта, что-то вроде "Посмотреть больше душей Mira из Showermania" (как показано на скриншоте ниже).

linking back to product's current category

Проблема в том, что некоторые товары отнесены к нескольким категориям, поэтому изначально я показываю эту ссылку только на товары в определенной категории.

Я получаю текущую категорию вот так: -

$currentCatIds = $_product->getCategoryIds();
$categoryCollection = Mage::getResourceModel('catalog/category_collection')
                    ->addAttributeToSelect('name')
                    ->addAttributeToSelect('url')
                    ->addAttributeToFilter('entity_id', $currentCatIds)
                    ->addIsActiveFilter();

А затем, как только коллекция будет загружена, я могу вывести ссылку, используя следующее: -

<?php foreach ($currentCatIds as $catid) { ?>
    <?php if ($catid == 160) { ?>
        <p>View more <a href="<?php echo Mage::getModel('catalog/layer')->getCurrentCategory()->getUrl(); ?>/filter/<?php echo strtolower ($manufacturerName = $_product->getAttributeText('manufacturer')) ?>" onclick="_gaq.push(['_trackEvent', 'Internal Linkage', 'Product Back To Links', '<?php echo $manufacturerName = $_product->getAttributeText('manufacturer') ?> <?php echo Mage::getModel('catalog/layer')->getCurrentCategory()->getName(); ?>',, false]);"><?php echo $manufacturerName = $_product->getAttributeText('manufacturer') ?> <?php echo Mage::getModel('catalog/layer')->getCurrentCategory()->getName(); ?></a> from Showermania.</p>
    <?php } ?>  
<?php } ?>

Это работает довольно хорошо в том смысле, что если продукт относится к категории с идентификатором 160, мы выведем "Просмотреть больше [название производителя] [название категории] из Showermania".

Проблемы

Канонические URL-адреса для продуктов в настоящее время являются domain.com/productURL, поэтому эти версии индексируются в поисковых системах (хотя это нормально). Если вы посетите эти страницы, ссылка не получает правильное название категории, он получает корневую категорию по умолчанию (как показано на скриншоте ниже).

linking back to product's current category

Это означает, что ссылка на текущую категорию продукта отображается правильно только в том случае, если страница продукта доступна через меню навигации и по путям категорий.

Из-за потенциальных проблем, возникающих при этом сценарии, возможно, Mage::getModel('catalog/layer')->getCurrentCategory() не лучший подход к этому? Или, может быть, его можно было бы еще больше изменить, чтобы избежать этой проблемы - может быть, исключив определенные идентификаторы категорий, чтобы они возвращались только к тем, которые мы хотим использовать?

В любом случае, я рассматривал разные подходы...

Попробовав следующее, я вывел все категории, к которым относится продукт, на странице просмотра продукта: -

<?php $categories = $_product->getCategoryIds(); ?>
<?php foreach($categories as $k => $_category_id): ?>
<?php $_category = Mage::getModel('catalog/category')->load($_category_id) ?> 
<a href="<?php echo $_category->getUrl() ?>"><?php echo $_category->getName() ?></a>
<?php endforeach; ?>

Отлично, это правильно определяет каждую категорию, к которой относится продукт.

  • Все товары отнесены к корневой категории по умолчанию.
  • Многие товары относятся к категориям, помеченным как "Специальные Предложения" или "Домашняя страница" для отображения в различных разделах веб-сайта.
  • Все продукты также отнесены к родительским категориям в дополнение к категории нижнего уровня.

Например, этот продукт будет относиться ко всем этим категориям: -

  • <a href="/catalog/category/view/s/default-category/id/2/"> Категория по умолчанию</a>
  • <a href="/showering"> Принятие душа </a>
  • <a href="/special-offers">Специальные предложения </a>
  • <a href="/showering/showers">Душевые</a>
  • <a href="/homepage"> Домашняя страница </a>

Мы хотели бы только связать вернемся к наиболее актуальной и подходящей категории (как с точки зрения поисковой системы, так и с точки зрения пользователя). В данном случае это будет категория Showers.

Если этот подход был бы лучшим, является ли единственным реальным способом справиться с этим, чтобы исключить бесчисленные идентификаторы категорий, чтобы гарантировать, что мы связываемся только с правильной "текущей" категорией? И если да, то как бы это лучше всего было написать - что-то вроде этого?

<?php if ($catid == 500,501,502,503,504,505) { ?>
    <?php //do nothing ?>
<?php } else { ?>
    <?php //do this ?>
<?php } ?>

Мы очень ценим ваши отзывы о том, чего мы здесь пытаемся достичь. Спасибо.

Ссылка на рассматриваемый продукт, если это полезно для рассмотрения в контексте: -

Author: Community, 2014-03-04

2 answers

Хорошо, так что на самом деле у меня есть вполне приличное решение этого вопроса, используя мой второй подход в моем вопросе. Я пока не уверен в последствиях для производительности, но вот что я сделал...

<?php $categories = $_product->getCategoryIds(); ?>
<?php foreach($categories as $k => $_category_id): ?>
<?php $_category = Mage::getModel('catalog/category')->load($_category_id) ?>
<?php $ignoredcats = array(2,360,124,4); ?> <!-- add all category ID's here that we wish to ignore -->
    <?php if (in_array($_category_id, $ignoredcats )){ ?>
        <?php //do nothing ?>
<?php } else { ?>
<?php if($_category->getIsActive()): ?> <!-- make sure the category is active first -->
    <p>View more <a href="<?php echo $_category->getUrl() ?>/filter/<?php echo strtolower ($manufacturerName = $_product->getAttributeText('manufacturer')) ?>" onclick="_gaq.push(['_trackEvent', 'Internal Linkage', 'Product Back To Links', '<?php echo $manufacturerName = $_product->getAttributeText('manufacturer') ?> <?php echo $_category->getName() ?>',, false]);"><?php echo $manufacturerName = $_product->getAttributeText('manufacturer') ?> <?php echo $_category->getName() ?></a> from Showermania.</p>
<?php endif; ?>

Затем будет выведено что-то вроде следующего снимка экрана, но, указав идентификатор категории в $ignoredcats, будет отображаться только для категорий по моему выбору.

linking back to products categories

Затем я могу соответствующим образом оформить или изменить вывод. Вы могли бы в качестве альтернативы только выведите это для разрешенных категорий, а не для других запрещенных, если хотите.

В настоящее время эффективно выполняет эту работу для меня, но еще не заметил каких-либо последствий для производительности или каких-либо проблем, которые могут возникнуть в связи с этим.

 1
Author: zigojacko, 2014-03-04 14:09:28

Возможно, создайте атрибут категории, подобный логическому (например, addbacklink), который означает: добавьте обратную ссылку в эту категорию и сделайте что-нибудь в представлении продукта, например:

$category = Mage::registry('current_category');
if($category && $category->getData('addbacklink')){
//add link to current product view
}

Лучшим способом должно быть создание пользовательского блока и добавление его с помощью макета

 0
Author: apouey, 2014-09-24 22:52:21