Получить ключ URL категории в Magento
как получить URL-ключ категории в Magento. Я добавил этот текст в поле URL key CMS:
Category-1
вот как я сейчас пытаюсь показать свой URL категории в Якоре:
$_categories = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect('name')
->addAttributeToSelect('is_active');
<?php foreach($_categories as $_category): ?>
<a href="<?php echo $_category->getCategoryUrl($_category); ?>">
<?php endforeach; ?>
но всякий раз, когда я проверяю свой вывод, он все еще показывает следующее:
<a href="">
<span>Manual Tile Cutters</span>
</a>
Я уже проверил Google и форумы magento для этого, но я все еще не могу найти достаточного ответа.
кроме того, это то, что я пытаюсь назвать в Якоре URL ключ, или это другой URL?
6 ответов
оба других ответа есть штраф DB. Лучший способ добавить информацию URL категории на уровне коллекции и просто использовать его по своему вкусу в файлах шаблонов. Настройте свой код следующим образом:
$_categories = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect('name')
->addAttributeToSelect('is_active')
->addUrlRewriteToResult();
<?php foreach($_categories as $_category): ?>
<a href="<?php echo $_category->getUrl($_category); ?>">
<?php endforeach; ?>
обратите внимание на дополнительный метод, применяемый к коллекции категорий addUrlRewriteToResult()
и вызовите url-адрес с помощью getUrl()
вместо того, что у вас было раньше getCategoryUrl()
(нет такой вещи в коде).
Кстати, Ваш код должен работать нормально, если вы позвоните getUrl()
но слегка повлияет на производительность.
надеюсь, это поможет.
возможно, я не понял вопрос полностью, но код ниже даст вам url-адрес категории с учетом идентификатора
<?php $category = Mage::getModel('catalog/category')->load(4); ?>
<a href="<?php echo $category->getUrl(); ?>">
просто измените id 4 внутри load () с тем, который вам нужен
использование моделей Magento (Category -) может стать очень тяжелым для загрузки только для Загрузки URL-адреса категории. Когда вы находитесь в цикле, где вам нужно загрузить URL-адреса 9000+ категории URL-адресов, вы можете рассмотреть возможность использования функции перезаписи url-адресов для извлечения URL-адресов, поскольку это не связано с загрузкой многочисленных моделей Magento:
$requestPath = Mage::getSingleton('core/url_rewrite')
->getResource()
->getRequestPathByIdPath(
'category/' . $categoryId, Mage::app()->getStore()->getId());
return Mage::getBaseUrl() . $requestPath;
читать в этой статье для получения дополнительной информации о этого.
используйте Mage:: helper ('catalog/category') для этого
<?php $_helper= Mage::helper('catalog/category');
$_categories = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect('name')
->addAttributeToSelect('is_active'); ?>
<?php foreach($_categories as $_category): ?>
<a href="<?php echo $_helper->getCategoryUrl($_category); ?>">
<?php echo $_category->getName(); ?>
</a>
<?php endforeach;?>
Подробнее нажать услышать
Если вы хотите получить коллекцию атрибутов категории магазина и url категории, вы можете использовать
$collection = Mage::getModel('catalog/category')->getCollection()
->setStoreId($store->getId())
->addAttributeToSelect('entity_id')
->addAttributeToSelect('url_key')
->addAttributeToSelect('name')
->addAttributeToFilter('is_active', 1)
->addAttributeToFilter('include_in_menu', 1)
->addFieldToFilter('path', array('like'=> "1/{$rootCategoryId}/%"));
$collection->getSelect()->joinLeft(
array('url_rewrite_table' => $collection->getTable('core/url_rewrite')),
"url_rewrite_table.store_id = {$store->getId()} AND id_path = CONCAT('category/',e.entity_id)",
array('store_url_key' => 'request_path'
)
);
и получить путь запроса, как $row - >getStoreUrlKey () и префикс его с базовым Url-адресом магазина. Я использую это, чтобы показать сетку конкретных категорий магазина в панели администратора.
<?php
// View your current directory
echo getcwd();
//create a file handler by opening the file
$myTextFileHandler = @fopen(getcwd()."/../error-20180726.log","r+");
//truncate the file to zero
//or you could have used the write method and written nothing to it
@ftruncate($myTextFileHandler, 0);