Как выводить для каждой группы покупателей определенный текст Есть решение

Задача такая, на витрине магазина выводить для каждой группы покупателей определенный текст.

Например для розницы: "Только сегодня сделав заказ получаете скидку 5%" а для опта например: "Только сегодня для Вас бесплатная доставка"


Предполагаю должно быть как-то так:

{if $ID_ГРУППЫ_ПОКУПАТЕЛЕЙ == 3} Только сегодня сделав заказ получаете скидку 5%" а для опта например{/if}

{if $ID_ГРУППЫ_ПОКУПАТЕЛЕЙ == 2} Только сегодня для Вас бесплатная доставка{/if}


Вот только что должно быть вместо ID_ГРУППЫ_ПОКУПАТЕЛЕЙ

34 ответа

  • 7
    Леонид Вакуленко Webasyst 17 февраля 2015 03:20 # Решение

    Встроенной возможности нет, и это большое упущение.

    Можно использовать для этого свой класс shopCustom с таким кодом:

    <?php
    class shopCustom
    {
        public static function getContactCategories($contact_id)
        {
            $ccm = new waContactCategoriesModel();
            return $ccm->getContactCategories($contact_id);
        }
    
        public static function getContactCategoryIds($contact_id)
        {
            return array_keys(self::getContactCategories($contact_id));
        }
    }

    Тогда в шаблоне сработает:

    {if in_array(42, shopCustom::getContactCategoryIds($wa->user('id')))}
        Поздравляем, вы состоите в категории id=42.
    {/if}
    • +1
      Koribo Koribo 17 февраля 2015 06:01 #

      Большое спасибо! сработало!

      • +1
        Denis Denis 14 февраля 2017 22:17 #

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

    • +2
      strannik285 strannik285 28 апреля 2015 04:13 #

      извините за невежество: а что означает цифра 42? и где можно найти id группы?

    • +1
      Василий Пановицын Василий Пановицын 12 августа 2015 18:34 #

      Леонид, подскажите, как быть в том случае, если установлен плагин Контакты ПРО?

      Там ведь нет категорий пользователей (categories). Там есть только группы (group).

      Как сделать все то же самое, только для групп из плагина Контакты ПРО?

      • +1
        Леонид Вакуленко Леонид Вакуленко Webasyst 13 августа 2015 05:30 #

        Давайте определимся с терминологией.

        Группа - это список пользователей. Группы в первую очередь нужны для управления правами доступа в бекенд. Абы кого в группу не добавишь, только юзера с доступом в админку.

        Категория - это список любых контактов, не обязательно пользователей. Чтобы пользоваться категориями, не нужен плагин ПРО.

        Контакты ПРО прячут категории и добавляют третью сущность для того же самого: списки. Это тоже перечень любых контактов. Списки являются надстройкой над базовыми категориями, поэтому Контакты ПРО прячут сами категории. Но где-то внутри себя каждый список помнит ID соответствующей категории, и в шаблонах можно использовать этот ID категории, если его знать.

        А ещё Контакты ПРО добавляют теги. Каждый тег можно в каком-то смысле считать статическим перечнем контактов.

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

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

        • +1
          Василий Пановицын Василий Пановицын 13 августа 2015 07:12 #

          Леонид, спасибо за оперативный ответ!

          В первую очередь интересуют именно группы пользователей.

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

          Ну и если поделитесь кодом для списков (чтобы также иметь возможность вывода определенного текста для всех пользователей во фронтенде) буду Вам очень благодарен!

          • +1
            Леонид Вакуленко Леонид Вакуленко Webasyst 13 августа 2015 07:34 #

            Ага, то есть речь не о фронтэнде.

            Группы текущего авторизованного пользователя можно получить вот так:

            wa()->getUser()->getGroups()     // список group_id, или
            wa()->getUser()->getGroups(true) // group_id => название группы

            Id'шники списков, в которых состоит текущий авторизованный пользователь:

            $ccm = new waContactCategoriesModel();
            $category_ids = array_keys($ccm->getContactCategories(wa()->getUser()->getId()));
            
            wa('contacts'); 
            $vm = new contactsViewModel();
            $view_ids = array_keys($vm->getByField('category_id', $category_ids, 'id'));

            $view_ids будет содержать id, как они отображаются в адресной строке браузера при открытии списка в приложении Контакты.

    • +1

      расширение своего же кода костылями..

  • 2
    Ram 28 сентября 2015 06:13 #

    Здравствуйте! Как можно вывести "Категории покупателей" которые есть в приложении "магазин"? Нужно вывести в витрине авторизованного покупателя его принадлежность категории...

  • 1
    Denis 14 февраля 2017 10:39 #

    Всем доброго дня.

    Можно чуточку разъяснений.

    Создал shopCustom.css c с кодом внутри и разместил в шаблонах магазина и сайта:

    <?php
    class shopCustom
    {
    public static function getContactCategories($contact_id)
    {
    $ccm
    = new waContactCategoriesModel();
    return $ccm->getContactCategories($contact_id);
    }

    public static function getContactCategoryIds($contact_id)
    {
    return array_keys(self::getContactCategories($contact_id));
    }

    В разделе сайт на созданной странице разместил код:

    {if in_array(5, shopCustom::getContactCategoryIds($wa->user('id')))}
    Поздравляем, вы состоите в категории id=5. {/if}

    Группу пользователей которым разрешен доступ выяснил, в моем случаи это id=5

    На данный момент созданная страница выдает ERROR 500 https://s170121-585.webasyst.cloud/sky/stranitsa-d...


    В чем ошибка?

    -может не надо создавать отдельный shopCustom.css, а вставить код в уже существующий класс, если да, то в какой? (в какое место)

    -Шаблон вывода тоже наверное не в том месте, если да то в какой конкретно шаблон вставляется код? (в какое место)


  • 1
    Denis 15 февраля 2017 09:39 #

    Если в корне, то в облаке это сделать невозможно.

    По пути параллельного мышления:

    {if $wa->isAuthEnabled() && $wa->user()->isAuth()}

    "Текст"

    {/if}

    -А если немного модифицировать код вывода информации для авторизованных пользователей.

    Правильно ли я понимаю что "$wa->user()" разрешает доступ всем юзерам, тогда чем заменить "$wa->user()" для определенной группы, например для группы юзеров "Id=5"

    • +1
      Denis Denis 15 февраля 2017 10:21 #

      Перебрал практически все параметры

      {if $wa->isAuthEnabled(ContactCategoryIds) && $wa->user('$contact_id')->isAuth('id=5')}

      "Текст"

      {/if}

  • 2
    RaKe 8 декабря 2017 21:24 #

    Подскажите пожалуйста, реализована ли такая возможность? Я создал несколько групп покупателей, нужно, чтобы при регистрации пользователь атвоматически получал группу, например с ID = 4

  • 2
    Сергей Правдин 15 января 2019 11:07 #

    До сих пор что ли не сделали нормальный вариант скрытия текста от группы? За что только деньги платим.

  • 1
    devellopah 18 января 2019 20:43 #

    Если список групп можно достать через

    {$group = $wa->user()->getGroups()}

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

    {$cats = $wa->user()->getCategories()}

    Почему это до сих пор не реализовано? Ребята, прошло уже 4 года как задали этот вопрос!

    p.s. неужели мне самому придётся писать плагин...

  • 1
    devellopah 19 января 2019 02:27 #

    Леонид на самом деле помог, просто не объяснил толком, что создать и куда положить.

    Я набрёл на эту статью. Согласно тому, что там написано, нужно код Леонида положить в файл с именем shopCustom.class.php

    Затем этот файл положить в папку вашего сайта на сервере(вы можете подключиться по ftp с помощью filezilla) по адресу wa-apps/shop/lib/classes/

    После того, как вы это сделаете вы сможете использовать в шаблоне

    shopCustom::getContactCategoryIds($wa->user('id')))

    который вернёт вам список id категории, в которых находится пользователь.

    При установке обновлений ничего не слетит, в статье пишут об этом, так что можете вздохнуть спокойно)

    Файлы пользовательских классов не затрагиваются при установке обновлений через «Инсталлер».

    И последний штрих...

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

    p.s. здесь работы - кот наплакал, но почему-то экспертам webasyst так и не удалось толком(от начала до конца) объяснить, что нужно делать.

  • 1
    Антоний 8 декабря 2020 21:34 #

    прошло 5 лет, а нормальной реализации нет....

  • 1
    magazin online 7 февраля 2022 13:26 #

    6 лет? решения для облака так и нет? Webasyst жив?

    • +1
      Михаил Ушенин Михаил Ушенин Webasyst 7 февраля 2022 15:20 #

      Так не работает?

      {if array_key_exists(38, $wa->shop->customer->getCategories())}
      	Покупатель в категории «VIP». 
      {/if}
      {* 38 —  id категории «VIP» *}

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

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