Место для вас

Автозаполнение поля seo url в Opencart

Хоть OpenCart 1.5 имеет встроенный модуль создания ЧПУ-ссылок(seo url), но заполнять это поле вручную порою бывает ооочень лень. Представьте себе заголовок товара из 50-70 символов и 100 штук товаров. Брать и переделывать такой заголовок продукта очень долго и не удобно.

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

!!! ВНИМАНИЕ: требуется изменения файлов в папке admin\model\catalog\
- category.php (для создания seo url для категорий)
- product.php (для создания seo url для продуктов)

Покажу пример на основе category.php. Для продуктов (products.php) аналогично.

Разрабатывалось мною для версии OpenCart 1.5.3

в файле category.php находим функцию public function addCategory($data) и в ней находим if ($data['keyword']) {} и после закрывающей скобки добавить


else
{
    $get_my_title = $this->db->escape($value['name']); // получаем название категории
    $tr = array ("А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I","Й"=>"Y","К"=>"K","Л"=>"L",
                 "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
                 "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b","в"=>"v","г"=>"g",
                 "д"=>"d","е"=>"e","ж"=>"j","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p",
                 "р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y","ы"=>"yi",
                 "ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya","."=>"-"," "=>"-","?"=>"-","/"=>"-","\\"=>"-","*"=>"-",":"=>"-","*"=>"-",
                 ">"=>"-","|"=>"-","'"=>""); //это массив для транслитерации
    $my_seo_url  = strtr($get_my_title ,$tr);
    $this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'category_id=" . (int)$category_id . "', keyword = '" . strtolower($my_seo_url) . "'");// записываем seo url в базу данных
}

И все. Сохраняем (тут нужно сохранять с кодировкой UTF-8 без BOM). Теперь когда вы создаете категорию, то seo url будет создаваться автоматически. Вам не нужно заботиться о его создании самому или платить деньги кому-то.

Так же хочу отметить, что тут еще я добавил функцию транслитерации. Теперь русские названия превращаются в "англонаписанные" =)

Тоже самое можно если нужно проделать для product.php Только эти изменения применяются в функции public function addProduct($data)
Находим строку foreach ($data['product_description'] as $language_id => $value) {
и тут, сразу после открывающей скобки добавляем $get_my_title = $this->db->escape($value['name']); // получаем название продукта

а дальше , как и в предыдущем случае находим if ($data['keyword']) {}
и вставляем после закрывающей скобки

else
{
	$tr = array ("А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I","Й"=>"Y","К"=>"K","Л"=>"L",
	"М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
	"Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b","в"=>"v","г"=>"g",
	"д"=>"d","е"=>"e","ж"=>"j","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p",
	"р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y","ы"=>"yi",
	"ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya","."=>"-"," "=>"-","?"=>"-","/"=>"-","\\"=>"-","*"=>"-",":"=>"-","*"=>"-",
	">"=>"-","|"=>"-","'"=>""); //это массив для транслитерации
	$my_seo_url = strtr($get_my_title ,$tr);
	$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . strtolower($my_seo_url) . "'");// записываем seo url в базу данных
}

Запомните, что если вы обновите движок, то эти изменения полетят.

PS: вот статья про то, КАК АВТОМАТИЧЕСКИ СГЕНЕРИРОВАТЬ SEO URL ДЛЯ OPENCART 2.x.


Место для вас

Коментарии

добавить коментарий

  1. Сергей - 18 марта, 2016 в 14:27:43

    Полезная статья, но уточню, что данный код работает только при создании новой категории или товара. Для того, чтобы работало и при редактировании, нужно ниже найти в функции редактирования блок с "if ($data['keyword']) " и вставить такой же код и там. Плюс, в символы транслитерации добавил такие знаки, как запятая, скобки, проценты, восклицательный и вопросительный знаки.

    • Админер - 18 марта, 2016 в 14:27:50

      Сергей, спасибо.


      я знаю, что код не идеален. но все руки не доходят пофиксить код. а с другой стороны надо ли это делать? под вторую версию опенкарта сделали полноценный ocmod на основе моего же этого примера.

    • Артем - 04 апреля, 2016 в 13:13:08

      Админер, сделать то сделали, но вот сейчас пытаюсь настроить ocstore 2.1.0.2.1, не работает там автозаполнение. Возможно это у меня так... в принципе, новичок в опенкарте.

    • Админер - 05 апреля, 2016 в 12:06:05

      Артем, вы юзали модуль или использовали решение из статьи?
      я накидал во время обеда. не могу проверить. и не гарантирую сейчас верность, но суть думаю будет ясна. если нет, то продолжим.
      я открыл файл \admin\model\catalog\product.php и в функцию addProduct начиная с 118 сроки внес изменения:


              if (isset($data['keyword'])) {
                  $this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
              }
              else
              {
                  $str = array ("А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I","Й"=>"Y","К"=>"K","Л"=>"L",
                       "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
                       "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b","в"=>"v","г"=>"g",
                       "д"=>"d","е"=>"e","ж"=>"j","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p",
                       "р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y","ы"=>"yi",
                       "ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya","."=>"-"," "=>"-","?"=>"-","/"=>"-","\\"=>"-","*"=>"-",":"=>"-","*"=>"-",
                       ">"=>"-","|"=>"-","'"=>""); //это массив для транслитерации

                  foreach ($data['product_description'] as $language_id => $value)
                  {

                      $get_my_title = $this->db->escape($value['name']); // получаем название категории
                      $my_seo_url  = strtr($get_my_title ,$str);

                      $this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . strtolower($my_seo_url) . "'");
                  }
              }




      попробуйте. и скажите результат.

  2. Артем - 05 апреля, 2016 в 12:06:08

    Админер, Благодарю за ответ.

    К сожалению, после всех манипуляций с файлом (т.е. вставляю код предложенный Вами в файл product.php), после добавления товара, урл остаётся без ЧПУ (т.е. не срабатывает автоподстановка), затем, после повторного захода в админке в этот товар, вверху я получаю такую ошибку: savepic.org/8301835.png

    Извините, что ссылкой, код не получилось вставить в комментарий, выдал ошибку.

    • Админер - 05 апреля, 2016 в 12:06:10

      Артем, я так и думал, что не сработает. мне foreach не давал покоя. но я покапался в коде. короче, решение вот.


              if ($data['keyword']) {
                  $this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
              }
              else
              {
                  $str = array ("А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I","Й"=>"Y","К"=>"K","Л"=>"L",
                       "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
                       "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b","в"=>"v","г"=>"g",
                       "д"=>"d","е"=>"e","ж"=>"j","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p",
                       "р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y","ы"=>"yi",
                       "ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya","."=>"-"," "=>"-","?"=>"-","/"=>"-","\\"=>"-","*"=>"-",":"=>"-","*"=>"-",
                       ">"=>"-","|"=>"-","'"=>"",'"'=>""); //это массив для транслитерации

                  $get_my_title = $this->db->escape($data['product_description'][1]['name']);
                  $my_seo_url  = strtr($get_my_title ,$str);

                  $this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . strtolower($my_seo_url) . "'");
              }

      дело в том, что у opencart один seourl не зависимо от языков. будь у меня один язык или несколько, но seourl будет везде одинаковый. честно говоря глупый подход. но я не сеошник. может так и верно. фиг его знает. а если мне надо чтоб для каждого языка был свой url?
      пробуйте. а мне надо будет сделать новую статью.
      только обратите внимание на $data['product_description'][1]['name']
      1 - это id языка. если у вас несколько языков в системе, то надо подставить тот, с языка которого, вам нужна генерация seourl.

    • Админер - 05 апреля, 2016 в 12:06:15

      Артем, хз. у меня отработало. Давай так поступим. Я тебе пришлю файл целиком. Но тока завтра. Исходники на работе.

    • Артем - 05 апреля, 2016 в 12:06:17

      Админер, благодарю за предложение и в целом большое спасибо за фидбек! Пороборся я с плагином - goo.gl/1tunRV вроде всё завелось... Только вот один момент не ясен, неужели всё так печально, что после добавления любого материала нужно кэш сбрасывать? Это ведь неистовая боль какая-то получается... Впервые такое встречаю, при том что работал с кучей разных CMS.

    • Админер - 05 апреля, 2016 в 12:06:22

      Артем, я все равно попробую полностью для 2ой версии выложить статью. без плагинов. И файл приложить.


      по поводу кеша:
      а если оотключить кеширование?

  3. Артем - 05 апреля, 2016 в 12:06:19

    Админер, сорри, выше ошибся линком на плагин. Вот актуальная - goo.gl/QUT5Tx

  4. Серж Ткач - 16 августа, 2017 в 08:42:35

    Действительно, зачем вручную, если есть модули. Например SEO URL Generator FREE — генерирует ЧПУ автоматически от языка по умолчанию без необходимости ручных правок (в отличие от другого подобного модуля)

Добавить коментарий

кликните на картинку,
чтоб обновить код

Что за сайт

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

Будь в курсе

Интересненько

Вверх