Задача - сделать ЧПУ адреса для тэгов, т.е. из
/tag/product/list/tagId/253/ сделать
/tag/weight-loss. Думаю другого способа, кроме реврайтов, нет, поэтому будем создавать по реврайту на тэг. А т.к. модуль, создающий реврайты, у нас уже есть (Blogrewrite, он делает реврайты для блоговых адресов), то вместо создания нового модуля воспользуемся существующим. В будущем надо бы сделать отдельный модуль, если можно - даже перехватывать создание нового тэга и автоматически делать реврайт. Но сейчас лениво :)
Контроллер
Итак, добавляем новую кнопку на страницу модуля Blogrewrite, которая будет создавать/обновлять реврайты для тэгов. Соответственно, добавляем новое действие в контроллер Blogrewrite:
<?php
class Mage_Blogrewrite_Adminhtml_BlogrewriteController extends Mage_Adminhtml_Controller_Action {
...
public function maketagrewritesAction() {
...
}
}
?>
Действие очень простое - нужно перебрать все тэги и на каждый создать реврайт. Для этого будем использовать модель
tag/tag:
// Load all approved tags
$model = Mage::getModel('tag/tag');
$collection = $model->getResourceCollection()
->addStatusFilter($model->getApprovedStatus())
->addStoreFilter(Mage::app()->getStore()->getId())
->load();
Получили коллекцию тэгов, утверждённых, и относящихся к текущему магазину. Дальше перебираем эту коллекцию и обновляем реврайты:
foreach ($collection as $_tag) {
$tagId = $_tag->getId();
$idPath = "tag/$tagId";
$requestPath = 'tag/' . Slugify($_tag->getName());
$targetPath = "tag/product/list/tagId/$tagId";
$this->_makeRewrite($idPath, $requestPath, $targetPath);
}
Наверное я плохо искал, но я не увидел как сделать slug адреса с помощью Magento. Поэтому я написал свою функцию, которую вынес в
index.php. Она нам ещё пригодится для шаблонов.
function Slugify($url) {
// remove all non-alphanumeric characters except for spaces and hyphens
$res = preg_replace('/[^a-z0-9- ]/', '', strtolower($url));
// remove double spaces and substitute the spaces with hyphens
$res = str_replace(' ', '-', str_replace(' ', ' ', $res));
return $res;
}
Готово. Теперь что бы создать реврайты для тэгов нужно зайти в админку, на странцу модуля Blogrewrite, и нажать кнопку
Make Tag Rewrites.
Шаблоны
Теперь адреса вида
/tag/weight-loss обработаются нормально, только вот они пока нигде не используются. Нужно поправить шаблоны, которые выводят тэги. Это файлы
cloud.phtml,
list.phtml и
popular.phtml в папке
app\design\frontend\default\sunnyD\template\tag\. Вывод адреса тэга имеет такой вид:
<a href="<?php echo $_tag->getTaggedProductsUrl() ?>"><?php echo $this->htmlEscape($_tag->getName()) ?></a>
Нам нужно заменить вызов функции
getTaggedProductsUrl на свой код:
<a href="<?php print trim(Mage::getBaseUrl(), '/') . '/tag/' . Slugify($_tag->getName()) ?>"><?php echo $this->htmlEscape($_tag->getName()) ?></a>
Готово! :) Реврайты созданы и работают, шаблоны выводят ЧПУ.
Комментариев нет:
Отправить комментарий