ЧПУ товаров

Подскажите, при создании товара ему автоматически задается ЧПУ из его имени. Я понимаю что вручную можно изменить, но можно ли эту функцию отключить вообще? Мне нужно чтобы в качестве ЧПУ был ID товара.

7 ответов

  • 1
    Nail 21 декабря 2019 11:17 #

    Никак.

    Уже давно просили этот функционал - ID вместо ЧПУ.

    Но так и не добавили.

    ps: Только через запуск скрипта прописывать в базу вместо ЧПУ id товаров.

    • +1
      oleg - oleg - 21 декабря 2019 15:39 #

      или через импорт-экспорт намутить, кто в sql не умеет )

  • 1
    Роман Гончаренко 22 декабря 2019 11:22 #

    Сейчас делаю через запрос к БД командой UPDATE shop_product SET url = id WHERE 1

    Может кто знает, возможно ли чтобы этот запрос применялся не ко всем товарам?  Например если у товара есть некая характеристика и в этой характеристики стоит значение 1. Возможно ли такое?

    • +1
      replicant replicant 22 декабря 2019 14:50 #

      Да. Такое возможно. Это тоже делается одним запросом.

      • +1
        Роман Гончаренко Роман Гончаренко 22 декабря 2019 16:51 #

        А можете подсказать как именно? А-то я в этом не понимаю ничего) 

        • +1
          replicant replicant 23 декабря 2019 11:34 #

          Сорри, что не сразу ответил. Закрутился перед НГ.

          Допустим мы создаем у товара доп. параметр, наличие которого показывает нам, что такой товар требует замены ЧПУ на ID. В тестах я назвал его 'curl'. Значение его в принципе не важно. Будем проверять просто на наличие.

          Запрос на обновление URL таких товаров будет выглядеть так

          UPDATE shop_product LEFT JOIN shop_product_params ON shop_product.id = shop_product_params.product_id SET shop_product.url = shop_product.id WHERE shop_product_params.name = 'curl' 

          Можете усложнить проверку, если вам надо проверять именно значение ключа, то в условие WHERE добавьте еще и AND shop_product_params.value='1' и проверку на ваше значение равное 1, например. Хотя, лично для себя, проверяю ключ только на наличие, если требуется ответ типа ДА/НЕТ. Нет ключа - НЕТ. Есть ключ - ДА, а значение - фиолетово. Хотя это дело личное и кому как нужно, тот так и делает.

          • +1
            Роман Гончаренко Роман Гончаренко 23 декабря 2019 14:01 #

            Большое спасибо за ответ. Только это не совсем то что нужно. Нужно с точности до наоборот. Если у товара нет доп параметра, то нужно сделать ЧПУ в виде ID, а если есть то не трогать ЧПУ))) какой тогда будет запрос?)) 

            • +1
              replicant replicant 23 декабря 2019 18:18 #

              Ну замените знак равенства на знак неравенства перед 'curl' или как там у вас условия проверки должны выполняться. Основной запрос от этого не поменяется вообще никак.

              phpmyadmin в принципе принимает разные варианты (потренируйтесь сначала на SELECT'ах)
              = или наоборот !=
              LIKE или наоборот будет NOT LIKE

              Запросы SQL написаны почти человеческим языком. ОБНОВИТЬ таблицу и конкретные данные в этой таблице и УСТАНОВИТЬ новые значения такие-то КОГДА что-то равно (или не равно) чему-то И... т.д.

              • +1
                Роман Гончаренко Роман Гончаренко 23 декабря 2019 18:45 #

                Для начала попробовал первый ваш вариант. Сделал для одного товара доп параметр 

                key=curl

                В phpmyadmin сделал запрос 

                UPDATE shop_product LEFT JOIN shop_product_params ON shop_product.id = shop_product_params.product_id SET shop_product.url = shop_product.id WHERE shop_product_params.name = 'curl' 
                Но не сработало (

                Затронуто 0 строк. (Запрос занял 0.0002 сек.)
                <code class="sql"></code>
                • +1
                  replicant replicant 23 декабря 2019 20:50 #

                  Читайте внимательнее. curl - это не значение. curl - это и есть key в данном случае. Я же написал, что проверяем по наличию ключа, а не по его значению. Если проверять значения, то надо запрашивать еще и value определенного параметра или только value в зависимости от того насколько value уникально для вашего случая и достаточно ли только его для подобной выборки.

                  Для случая key = curl (key - это name, а curl - это value)

                  Не знаю как объяснить более подробно. Вот скриншот структуры таблицы shop_product_params

                  В моем примере доп. параметр curl=id. А у вас key=curl. Разница огромна. curl будет в разных колонках таблицы в вашем и моем случае. У меня это name, а у вас value.

                  В запросе shop_product_params.name = 'curl' - спрашивается именно имя параметра

                  И снова читаем первый пост и запрос, где все четко написано и про name и про value.

                • +1
                  replicant replicant 23 декабря 2019 20:52 #

                  Конечно не сработало, потому что создали не то, что надо для этого примера. Перевернули ровно с ног на голову. Доп. параметр должен называться curl, а не key, а чему он будет равен дело ваше. Напишите curl=curl и точно не промажете. :)))

                  • +1
                    Роман Гончаренко Роман Гончаренко 23 декабря 2019 22:04 #

                    Ну я же говорил что вообще не шарю (от слова совсем) :)

                    Написал curl=curl и все получилось ) Спасибо!

                    • +1
                      replicant replicant 23 декабря 2019 22:28 #

                      Постепенно разберетесь. Да и phpmyadmin подскажет, если что.

              • +1
                Роман Гончаренко Роман Гончаренко 23 декабря 2019 22:44 #

                А можете еще подсказать по

                = или наоборот !=
                LIKE или наоборот будет NOT LIKEМ


                Мне нужно чтобы урл не обновлялся у товаров с доп параметром. Я попробовал запрос:

                UPDATE shop_product LEFT JOIN shop_product_params ON shop_product.id = shop_product_params.product_id SET shop_product.url = shop_product.id WHERE shop_product_params.name != 'curl'

                Но не прошло, может есть еще какие то варианты?

                • +1
                  Роман Гончаренко Роман Гончаренко 23 декабря 2019 22:54 #

                  проверял так

                  1 товару сделал чпу test-1 и добавил доп параметр.

                  2 товару сделал чпу test-2 и ничего не добавлял. Сделал запрос UPDATE shop_product LEFT JOIN shop_product_params ON shop_product.id = shop_product_params.product_id SET shop_product.url = shop_product.id WHERE shop_product_params.name != 'curl'


                  Поидеи у товара 1 должен был чпу сохраниться, а у 2 скинуться но ничего не произошло. Написано затронуто 0 строк (((

                • +1
                  replicant replicant 23 декабря 2019 23:04 #

                  Если =, то url обновится у тех, у кого доп. параметр имеет такой key
                  Если !=, то url обновится у тех, у кого доп. параметры не имеет такого key, но их записи есть в таблице shop_product_params т.е. есть любые другие доп. параметры.

                  Если записи о товаре в этой таблице нет и доп. параметров у товара вообще нет, то ничего и не произойдет.

                  LIKE и NOT LIKE работают аналогично.

  • 1
    Роман Гончаренко 23 декабря 2019 23:09 #

    Ааа, теперь понятно в чем дело. Мне то нужно чтобы обновлялись все товары у которых нет доп параметра url но могут быть другие.

    Если доп параметр есть и = url то обновлять чпу ненужно. 

    • +1
      replicant replicant 23 декабря 2019 23:14 #

      Сейчас делаю через запрос к БД командой UPDATE shop_product SET url = id WHERE 1 Может кто знает, возможно ли чтобы этот запрос применялся не ко всем товарам? Например если у товара есть некая характеристика и в этой характеристики стоит значение 1. Возможно ли такое?

      Изначально было так как в цитате и запрос четко такие ситуации отрабатывает. А именно, если у товара есть параметр, то заменить URL на ID. Потом вы перевернули всё как-то по-другому. Под ваши новые условия задачи запросы будут иные.

      • +1
        Роман Гончаренко Роман Гончаренко 23 декабря 2019 23:21 #

        Объясняю:

        UPDATE shop_product SET url = id WHERE 1  -  делается по крону 1 раз в минуту для того, чтобы обновить ID ко всем товарам которые автоматически импортируются от поставщика (их 20 тысяч). Делаю я это для того, чтобы через robots.txt закрыть все товары в ЧПУ которых есть числа от индексации.

        Далее вступает в работу контент менеджер. Он открывает товары, делает товарам нормальное название, пишет нормальное и УНИКАЛЬНОЕ описание - приводит карточку товара в человеческий вид, а не тот что идет от поставщика и стоит на тысячах магазинов. Далее для этих товаров (примерно 50 шт. в день) задается ЧПУ из названия. Этот товар разрешается к индексации т.к. в ЧПУ таких товаров нет цифр.

        Поэтому и нужно как то для таких товаров поставить запрет на обновление командой UPDATE shop_product SET url = id WHERE 1 , чтобы эти отредактированные товары попадали в индекс поисковиков.


        Вот в этом то вся и проблема.

        • +1

          Этот товар разрешается к индексации т.к. в ЧПУ таких товаров нет цифр

          Каким образом вы обеспечиваете разрешение/запрет на индексацию товара? 

          • +1
            Роман Гончаренко Роман Гончаренко 23 декабря 2019 23:40 #

            disallow:/product/*0

            disallow:/product/*1

            disallow:/product/*2

            disallow:/product/*3

            disallow:/product/*4

            disallow:/product/*5

            disallow:/product/*6

            disallow:/product/*7

            disallow:/product/*8

            disallow:/product/*9

            Таким образом все что находится в /product/ и имеет в ЧПУ цифры запрещено к индексации.

            /product/bla-bla индексируется т.к. в нем нет цифр.

          • +1
            replicant replicant 24 декабря 2019 00:04 #

            Лично у меня вызывает вопросы запрос, который выполняется по крону раз в минуту. Уверен, что можно обойтись без этого на уровне массового запрета карточки товара к индексации через <meta name =robots content=noindex,nofollow/> и открытия её только после простановки определенного ключа контент-менеджером. Одна строка в шаблоне и никакой возни с запросами в БД напрямую. Зачем запрос в базу по крону? Мне пока непонятно.

            • +1

              Этот запрос растет из придуманного "технологического" процесса, а сам процесс нацелен на недопускание индексации таких товаров. Вот я и начал распутывать клубок с начала, а не с того места, с которого началась эта тема =)

              • +1
                replicant replicant 24 декабря 2019 00:12 #

                Процесс придуман был очень "оригинальный". Думаю, что если товары проходят "модерацию", то надо закрыть все карточки и открывать по ключу вручную. Интересно глянуть на sitemap этого проекта. Придуманая связка URL = ID тут непричем даже будет.

                • +1

                  Всё так. Только думаю топикстартеру все же надо чтобы новые товары были видны на сайте, но при этом не индексировались. Первое что приходит в голову - убрать все из robots и воспользоваться noindex (или как там его), отмодерированным товарам проставлять доппараметр, а в уже в шаблоне проверять наличие этого доппараметра и в случае отсутствия ставить noindex. Но, конечно, надо знать детали. Может еще какие заковырки имеются.

                  • +1
                    replicant replicant 24 декабря 2019 00:35 #

                    Я имел ввиду закрыть все карточки от индексации мета-тегом, а не совсем от просмотра.

        • +1
          replicant replicant 23 декабря 2019 23:57 #

          Напишите лучше мне в telegram, потому что похоже у вас всё запутано основательно как-то или я просто не вижу всей картины целиком.

  • 1
    Роман Гончаренко 24 декабря 2019 00:17 #

    Я могу добавить <meta name =“robots” content=”noindex,nofollow”/> это не проблема. Вопрос в том, как потом открыть какой то товар не удаляя этот тег.

    • +1
      replicant replicant 24 декабря 2019 00:21 #

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

  • 1
    Роман Гончаренко 24 декабря 2019 00:38 #

    Что-то прям сложно все. Уже подумываю забить на это дело. Пусть индексируются, просто в будущем у товаров будет меняться ЧПУ - старый вылетать - не очень хорошо для SEO вроде.

    • +1
      replicant replicant 24 декабря 2019 01:02 #

      Скорее наоборот. Я тут накидал в index.html примерно смысл.

      {if $action == 'product'}
      {$allow = $wa->shop->product($product.id)}
      {if !$allow.params.index}
      <meta name="robots" content="noindex,nofollow">
      {/if}
      {/if}

      Товар не будет индексироваться пока менеджер не создаст ему доп.параметр index=1 например. Наличие этого параметра убирает мета-тег запрета индексации роботом товарных страниц. Никакие URL на ID по крону менять для этого не надо. С плагином управление доп.параметрами вообще все можно сделать красиво в виде списка значений yes/no.



      Или так

      Мышкой клац и товар пошел в поиск. По умолчанию можно поставить no и чуть-чуть поменять условие в коде.
  • 1
    Роман Гончаренко 24 декабря 2019 01:26 #

    А можно с вами кроме как по телеграму еще как-то связаться? Может сделаете за оплату? Чтобы по умолчанию все товары не индексировались. Вообще все в том числе которые сейчас есть на сайте.

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

    • +1
      replicant replicant 24 декабря 2019 01:35 #

      Код уже написан выше. Поставить его надо в index.html после строки примерно такого вида

      <meta name="keywords" content="{$wa->meta('keywords')|escape}" />

      Товару, который хотите разрешить к индексации, надо прописать доп. параметр index=yes.

  • 1
    Роман Гончаренко 24 декабря 2019 01:57 #

    Спасибо, сейчас буду пробовать. Надеюсь сработает. Так действительно проще чем с УРЛ заморачиваться. 

    • +1
      replicant replicant 24 декабря 2019 01:59 #

      Работает или нет надо смотреть в исходном коде HTML страницы товара в браузере. Там либо будет нужный мета-тег, либо нет, в зависимости от наличия доп. параметра index у товара.

      Есс-но все старые блокирующие конструкции в robots.txt надо убрать.

      • +1
        Роман Гончаренко Роман Гончаренко 24 декабря 2019 02:14 #

        Да, похоже что работает. Поставил доп. параметр и мета тег исчез. Спасибо огромное. Вы мне ужасно сильно помогли!

        • +1
          replicant replicant 24 декабря 2019 02:28 #

          Надеюсь это решение вам подойдет и поисковые роботы будут вести себя так, как вам надо.

        • +1
          replicant replicant 24 декабря 2019 11:37 #

          Вы в следующий раз лучше сразу описывайте задачу целиком от и до. Так проще искать решение, когда целиком видна вся картина, а не какие-то кусочки и части.

          На будущее советую купить плагин Управление доп. параметрами для категорий, товаров и страниц. Он сильно упростит работу с параметрами как в редакторе товара, так и в таблице товаров в категории массово с группами выбранных товаров. Грубо говоря в "один клик" проставить параметры для 10 товаров - запросто.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите