Как вывести id категории на странице товара?

Тема в разделе "Общие вопросы", создана пользователем solunski.d, 6 фев 2016.

  1. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    434
    Здравствуйте, ни как не могу взять id категории на странице товара. Мне нужно сделать чтобы товары которые принадлежат к определенной категории имели свой шаблон. А прописать в контроллере id и условие чтобы менять шаблон - это не дело.

    Мне нужно получить id в контроллере продукта и из ходя из этого поменять шаблон, но никак не могу сделать проверку...
     
    Последнее редактирование: 6 фев 2016
  2. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    Только остается вопрос. При переходе с главной есть в адресе категория? Если есть, то проблем нету.
    Если ее нет, то тут есть решение http://shop.opencart-russia.ru/full-path-breadcrumbs
     
  3. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    434
    Конечно, использую SEO Complete
    У меня товары лежат в категории, и у них нету цены, а на странице карточки есть кнопка купить, поэтому мне нужно изменить шаблон этих товаров
     
  4. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    тогда видимо так же как и в category.php

    PHP:
                $parts explode('_', (string)$this->request->get['path']);

                
    $category_id = (int)array_pop($parts);
     
  5. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    434
    Блин... Работает, а я даже не догадался, под носом все было... Просто тупил... Пытался отдельно получить id. Спасибо большое! :D
    Вот участок кода, тоже самое будет работать и с категориями
    PHP:
    $template 'product.tpl';

    if (
    $category_id == 67) {    $template 'product_new.tpl';    }

    if (
    file_exists(DIR_TEMPLATE $this->config->get('config_template') . '/template/product/'.$template)) {
        
    $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/'.$template$data));
    } else {
        
    $this->response->setOutput($this->load->view('default/template/product/'.$template$data));
    }
     
    Последнее редактирование: 6 фев 2016
  6. VladComplus

    VladComplus Новичок

    Сообщения:
    20
    Симпатии:
    0
    Добрый день!

    Несколько разе перечитал Ваш пост о ID категории в карточке товара. Но так и не понял как можно получить ID. В вашем посте вы пишите, что вам нужно загрузить разный шаблон для определенных товаров. А я хочу вывести разный текст в зависимости от пути к товару (разные категории).
    В контроллер добавил
    $path = '';
    $parts = explode('_', (string)$this->request->get['path']);
    $category_id = (int)array_pop($parts);

    В нужном месте product.tpl пишу условие:

    <? if ($category_id = 145) { ?>
    <?php echo $text_cat145; ?> - моя требуемая функция
    <?php } ?>

    А эта функция показывается во всех категориях, что я сделал не так не подскажите?
     
  7. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    434
    Еще не было дня)))

    PHP:
    // Мы в массив data добавили новое значение, а именно id текущей категории. Controller
    $data['this_id'] = $category_id;

    // А в шаблоне можно теперь использовать переменную $this_id; View

    if ( $this_id == 145 ) {
        echo 
    'Парам пам-пам';
    }
    А все что вы написали можно DELETE :D
     
  8. VladComplus

    VladComplus Новичок

    Сообщения:
    20
    Симпатии:
    0
    Спасибо, за оперативный ответ.
    Я не программист, поэтому если не сложно напишите что и куда и после чего вставлять?
    Я добавил $data['this_id'] = $category_id; в файл catalog/controller/product/product.php,
    получаю ошибку:
    Notice: Undefined variable: category_id in /hsphere/local/home/trunkcard/tester.ipodshipnik.tk/catalog/controller/product/product.php on line 248
     
  9. VladComplus

    VladComplus Новичок

    Сообщения:
    20
    Симпатии:
    0
    И еще одно дополнение каждый из товаров у меня лежит в нескольких категориях (от 1 до 3 шт).
    Но мне нужно определить категорию в каждом конкретном случае, вот пример глубиномера (хлебных крошек)
    имя-сайта/категория/подкатегория01/товар123 - нужен ID подкатегории01
    имя-сайт/категория/подкатегория14/товар123 - нужен ID подкатегории14, и т.д.
    Т.е мне нужно знать в какой конкретно категории сейчас находится пользователь
     
  10. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    434
    Тот код для категории, он позволяет получить текущий ID будучи на странице категории, тоже самое есть для страницы продукта, только переменная по другому называется.
     
  11. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    434
    Я вот сейчас посмотрел на код product.php, он не должен ругаться. Там есть данный участок.
    PHP:
                $path '';

                
    $parts explode('_', (string)$this->request->get['path']);

                
    $category_id = (int)array_pop($parts);
     
  12. VladComplus

    VladComplus Новичок

    Сообщения:
    20
    Симпатии:
    0
    Да вы правы такой код есть,
    вот такой
    Код:
    $category_info = $this->model_catalog_category->getCategory($path_id);
    я присваиваю новую функцию:
    Код:
    $this->data['cat_id'] = $path_id;
    затем в product.tpl
    ввожу:
    Код:
    <?php echo $cat_id; ?>
    и получаю ID категории (ID-143) а не подкатегории (ID-145).
    Что я опять сделал не так?

    Есть еще один вариант, где я получил список всех категорий в которых есть каждый конкретный товар:
    Код:
    <?php foreach ($categories as $categorie) { ?>
    <?php echo $categorie['category_id']; ?>
    <?php } ?>
    результат на экране 143 145 146 - список ID категорий
    Где 143 главная категория а мне нужны цифры 145 и 146, и в зависимости от того какие они выводить разные текстовые функции, а это не работает, не могу заставить это сделать. Система выводит мою функцию столько раз, сколько категорий у товара (1-3).
    Не подскажите?
     
  13. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    434
    Так у вас OpenCart 1.5 версии, слишком старая версия.
    PHP:
    $parts explode('_', (string)$this->request->get['path']);
    // Выводит массив как категорию так и под категорию.
    var_dump($parts);
    Выводит в шапке сайта:
    PHP:
    array (size=2)
      
    => string '59' (length=2)
      
    => string '60' (length=2)
    Следовательно можно обратиться к нужному нам индексу.
    PHP:
    if ($parts[1] == 60) {
       echo 
    $parts[1];
    }
     
  14. VladComplus

    VladComplus Новичок

    Сообщения:
    20
    Симпатии:
    0
    Добрый день!
    Да вы правы у меня старая версия 1.5.6.1 Opencart.
    Если можно то объясните куда вписать
    array (size=2)
    0 => string '59' (length=2)
    1 => string '60' (length=2)

    И что означают цифры 59 и 60?
     
  15. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    434
    Никуда, функция var_dump возвращает то что храниться в массиве или переменой.
    59 и 60 это id категории и подкатегории.
     
  16. VladComplus

    VladComplus Новичок

    Сообщения:
    20
    Симпатии:
    0
    Ок, условия if ($parts[1] == 60) {
    echo $parts[1];
    }
    я вывожу в product.tpl, это я понял
    а вот это
    array (size=2)
    0 => string '59' (length=2)
    1 => string '60' (length=2)

    куда вписать и в какой файл?
     
  17. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    434
    Вы совсем не поняли. Этот тот случай когда не понимаешь куда лезешь и что делаешь.
    Это пример и он для контроллера, product.php.
    PHP:
    if ($parts[1] == 60) {
       echo 
    $parts[1];
    }
    В контроллере создаете:
    PHP:
    if ( isset($parts[1]) ) {
        
    $this->data['cat_id'] = $parts[1];
    }
    А далее проверка в tpl файле
    PHP:
    if ( $cat_id == 60 ) {
        
    //...
    }
    А это никуда:
    PHP:
    array (size=2)
    => string '59' (length=2)
    => string '60' (length=2)
     
  18. VladComplus

    VladComplus Новичок

    Сообщения:
    20
    Симпатии:
    0
    Да я как бы и не утверждал, что знаю что делаю.
    Я не знаю что делаю, но очень хочу понять как нужно сделать, чтобы решить. Поэтому и вопросы мои "идиотские", для тех кто понимает.
    Вот эти две конструкции
    if ($parts[1] == 60) {
    echo $parts[1];
    } В контроллере создаете:
    if ( isset($parts[1]) ) {
    $this->data['cat_id'] = $parts[1];
    }
    в контроллер, куда вставлять, там где мы получаем путь?
     
  19. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    434
    Вы используете только последнюю конструкцию, да.
     
  20. VladComplus

    VladComplus Новичок

    Сообщения:
    20
    Симпатии:
    0
    Если меня не проклянут, то задам еще один вопрос - ;)
    Создал в контроллере:
    Код:
    if (isset($this->request->get['path'])) {
                $path = '';
    
                $parts = explode('_', (string)$this->request->get['path']);
                if ( isset($parts[1]) ) {
                $this->data['cat_id'] = $parts[1];
                }
    Вывожу в product.tpl
    Код:
    <? if ( $cat_id == 145 ) { ?>
        <?php echo $model; ?> // показать модель
    <?php } ?>
    И не работает, где я опять накосячил?