[Помогите] Разные уровни доступа по категориям

Тема в разделе "OpenCart", создана пользователем maetus, 21 окт 2015.

  1. maetus

    maetus

    Регистрация:
    24 фев 2013
    Сообщения:
    216
    Симпатии:
    40
    Магазин направлен на два направления. Розница и ОПТ.

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

    Такое можно реализовать?

    [​IMG]
     
  2. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    740
    Симпатии:
    266
    Вариантов как всегда 2. 1) модуль 2)руками.
    Руками принцип работы примерно такой: 1)клонируем поле с ценой в движке (т.е. задаем новую переменную, создаем для нее поле в б.д., прописываем в моделях, контроллерах и шаблонах) если не понимаете как клонировать, то расписывать слишком долго, но в принципе я сам в свое время понял и сложного ничего нет. 2)в движке есль настройка, позволяющая скрывать цену для незарегистрированных пользователей, используем эту настройку, чтобы скрыть оптовую цену.
     
  3. maetus

    maetus

    Регистрация:
    24 фев 2013
    Сообщения:
    216
    Симпатии:
    40
    Ок, предположим, что ISBN. Ставьте 1 в это поле, если товар оптовый.

    Давайте логику для вывода в категории напишу вам, примерно, дальше я думаю поймете..

    Где-нибудь в controller/catalog/category.php, скажем, прям перед getProducts($data); узнаем, является ли покупатель оптовым.

    PHP:
    $this->data['is_opt_customer'] = ($this->customer->isLogged() && $this->customer->getCustomerGroupId() == 5);
    Тут 5 - это идентификатор группы оптовых покупателей. Мы проверили, залогинен ли вообще покупатель, и является ли он оптовым. Группу создадите и будете добавлять в нее людей

    Добавим вывод в шаблон ISBN

    Найдите
    PHP:
    $this->data['products'][] = array(
    'product_id' => $result['product_id'],
    'thumb' => $image,
    Добавьте
    PHP:
    $this->data['products'][] = array(
    'product_id' => $result['product_id'],
    'thumb' => $image,
    'isbn' => $result['isbn'],
    Контроллер закончен.

    Файл шаблона
    сatalog/view/theme/ВАШАТЕМА/template/product/category.tpl

    Находим следующее:
    PHP:
    <?php if ($product['price']) { ?>
    <div class="price">
    <?php if (!$product['special']) { ?>
    <span class="special-price"><?php echo $product['price']; ?></span>
    <?php } else { ?>
    <span class="price-old"><?php echo $product['price']; ?></span>
    <span class="price-new"><?php echo $product['special']; ?></span>
    <?php ?>
    <?php 
    if ($product['tax']) { ?>
    <span class="price-tax"><?php echo $text_tax?> <?php echo $product['tax']; ?></span>
    <?php ?>
    </div>
    <?php ?>
    И, собственно, дописываем наше условие
    PHP:
    <? if ($product['isbn']==1) { ?>
    <? if ($is_opt_customer) { ?>
    //ПОКАЗЫВАЕМ ЦЕНУ ОПТОВИКУ
    <?php if ($product['price']) { ?>
    <div class="price">
    <?php if (!$product['special']) { ?>
    <span class="special-price"><?php echo $product['price']; ?></span>
    <?php } else { ?>
    <span class="price-old"><?php echo $product['price']; ?></span>
    <span class="price-new"><?php echo $product['special']; ?></span>
    <?php ?>
    <?php 
    if ($product['tax']) { ?>
    <span class="price-tax"><?php echo $text_tax?> <?php echo $product['tax']; ?></span>
    <?php ?>
    </div>
    <?php ?>
    <? } else { ?>
    ТЕКСТ, ДЛЯ ОПТОВЫХ ТОВАРОВ ВМЕСТО ЦЕНЫ НЕЗАЛОГИНЕННЫМ ПОЛЬЗОВАТЕЛЯМ
    <? } ?>

    <? } else { ?>
    <?php if ($product['price']) { ?>
    <div class="price">
    <?php if (!$product['special']) { ?>
    <span class="special-price"><?php echo $product['price']; ?></span>
    <?php } else { ?>
    <span class="price-old"><?php echo $product['price']; ?></span>
    <span class="price-new"><?php echo $product['special']; ?></span>
    <?php ?>
    <?php 
    if ($product['tax']) { ?>
    <span class="price-tax"><?php echo $text_tax?> <?php echo $product['tax']; ?></span>
    <?php ?>
    </div>
    <?php ?>

    <? } ?>
    Вот посоветовали делать таким образом
     
    Lasted edited by : 22 окт 2015
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.050
    Симпатии:
    778
    Частично правильно. Но такой вариант скрывает не товары от незарегистрированных, а только их цены. Если нужно скрыть и сами товары, то править нужно /catalog/model/catalog/product.php.
    Например, для товаров в категориях и поиска нужно править getProducts и getTotalProducts.
    После
    PHP:
            if (!empty($data['filter_manufacturer_id'])) {
                
    $sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'";
            }
    Добавляем
    PHP:
            if ($customer_group_id != 5) {

                
    $sql .= " AND p.isbn <> 1";

            }
    Это скроет для неоптовиков все оптовые товары, а оптовики увидят всё.