Автогенерирование seo-url

Тема в разделе "Ошибки и их решения", создана пользователем serg96, 3 дек 2014.

  1. serg96

    serg96 Новичок

    Сообщения:
    4
    Симпатии:
    2
    Столкнулся с проблемой, что если активировать seo-url, то валидация пропускает незаполнение поля SEO URL в админке, в результате чего на фронтенде ссылки на категории пустые (нет даже обычных параметров навроде ?category_id=123). Это явная недоработка.

    В качестве решения установил расширение Override Engine http://www.opencart.com/index.php?route=extension/extension/info&extension_id=8588

    Затем создал файл override/auto_seo_url/admin/model/catalog/category.php

    PHP:
    <?php class auto_seo_url_ModelCatalogCategory extends ModelCatalogCategory {
    private function 
    _getSeoUrl($data) {
        
    $this->load->helper('translit');
        return 
    Translit::toUrl(end($data['category_description'])['meta_title']);
    }

    public function 
    addCategory($data) {
        if (empty(
    $data['keyword'])) {
            
    $data['keyword'] = $this->_getSeoUrl($data);
        }
        return 
    parent::addCategory($data);
    }

    public function 
    editCategory($category_id$data) {
        if (empty(
    $data['keyword'])) {
            
    $data['keyword'] = $this->_getSeoUrl($data);}
            
    parent::editCategory($category_id$data);
        }
    }
    Плюс файл system/helper/translit.php:
    PHP:
    <?php class Translit
    {
    public static function 
    toUrl($st) {
        return 
    preg_replace('/[^\d\w]+/'''strtr(preg_replace('/ {2,}/'' 'mb_strtolower(trim($st))),array(
        
    'а' => 'a','б' => 'b','в' => 'v','г' => 'g','д' => 'd','е' => 'e','ж' => 'zh','з' => 'z','и' => 'i','й' => 'i','к' => 'k','л' => 'l','м' =>     'm','н' => 'n','о' => 'o','п' => 'p','р' => 'r','с' => 's','т' => 't','у' => 'u','ф' => 'f','х' => 'h','ц' => 'ts','ч' => 'ch','ш' => 'sh','щ' => 'shch','э' => 'e','ю' => 'yu','я' => 'ya','ь' => '','ъ' => '',' ' => '_''ы' => 'y',
        )
        ));
    }
    }
    По этому же принципу можно сделать автогенерирование url для товаров. Надеюсь кому нибудь пригодится.
     
    Последнее редактирование модератором: 3 дек 2014
    Romans нравится это.
  2. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.343
    Симпатии:
    702
    Очень странно! Убрал seo у категории и все есть, как и должно быть.
    А то что пропускает не заполненным, это в порядке вещей, т.к сео урль не является обязательным, это лишь чпу.

    За решение спасибо, пригодится. Только оформляйте в теги [ PHP ] в следующий раз.
     
    Последнее редактирование: 3 дек 2014
  3. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.343
    Симпатии:
    702
    И если делать, то через события в модели , а не через оверрайд
    PHP:
    $this->event->trigger('pre.admin.category.edit'$data);
    и меняем $data['keyword'] на транслит.
     
    serg96 нравится это.
  4. serg96

    serg96 Новичок

    Сообщения:
    4
    Симпатии:
    2
    Я неправильно объяснил наверно. Убирать seo не надо, достаточно добавить категорию с пустым url, тогда на фронтенде эта категория отобразится, но перейти по ней не получится.
    Спасибо, это самое очевидное решение, я почему то пропустил эту строчку изначально
     
  5. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.343
    Симпатии:
    702
    Все понял. Отличный баг. Увидел, нашел. Завтра оформлю...
    Как раз из за того что пустое поле, он и записывает в url_alias пустой keyword :)
     
  6. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.343
    Симпатии:
    702
    Если что, меняем в
    \admin\model\catalog\category.php

    50 строку if (isset($data['keyword'])) {
    на
    if ($data['keyword']) {
     
    Последнее редактирование: 4 дек 2014