1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

VM 2.x Настраиваемые поля на странице категории.

Тема в разделе "Virtuemart", создана пользователем norka13, 1 июл 2012.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
  1. norka13

    norka13 Создатель

    Заблокирован
    Регистр.:
    23 фев 2009
    Сообщения:
    41
    Симпатии:
    2
    Нужно вывести настраиваемые поля на странице категории. В гугле нашла такой способ.
    Код:
    1) берете файл
     
    VmSmallHelper.php
     
     
    и кладете /components/com_virtuemart/helpers
     
     
    2) Затем создаете настраиваемые поля и смотрите их ID в админке Virtuemart.
     
     
    3) открываете файл /templates/[template_name]/html/com_virtuemart/category/default.php
     
    и подключаете наш хелпер из пункта [1]
     
     
    defined('_JEXEC') or die('Restricted access');
     
    if(!class_exists("VmSmallHelper"))
        require(JPATH_VM_SITE.DS.'helpers'.DS.'vmsmallhelper.php');
     
    4) находите строки
     
    // Start the Output
     
    foreach ($this->products as $product ) {
     
    это вывод продуктов в цикле.
     
     
    5) затем в том месте, где нужно вывести какое-то настраиваемое поле пишете следующее
     
    echo VmSmallHelper::getCustomFieldValue($product, $iFieldId);
     
    где $iFieldId заменяете на номер настраиваемого поля, которое смотрели в пункте [2]
    Этот код выведет именно значение настраиваемого поля.
     
     
    6) Если нужно получить все поле, то
    $oField = VmSmallHelper::getCustomFieldValue($product, $iFieldId, true);
     
    код вернет объект поля, сделайте
     
    var_dump($oField);
     
    увидете, какие свойства хранят какие значения
     
    Вот и все:)
    Вся эта прелесть работает, выводя только значение заданного поля.Например 24кВт
    Вопрос. Как вывести заголовок поля. Например Мощность: 24кВт
     

    Вложения:

  2. haidamaka

    haidamaka Постоялец

    Регистр.:
    9 окт 2011
    Сообщения:
    59
    Симпатии:
    13
    Видимо нужно копать здесь: если getCustomFieldValue($product, $iFieldId, true); получает значение то getCustomFieldName($product, $iFieldId, true); - получает название.(чисто теория)
     
  3. jabbaxatt

    jabbaxatt Добрый модератор

    Moderator
    Регистр.:
    21 янв 2009
    Сообщения:
    878
    Симпатии:
    411
    Вышеприведённый способ имеет недостатки:
    - если у одного товара есть доп. поля а у другого их нет - на странице появляются ошибки кода.
    - у меня почему-то вообще не заработало, хотя я не подвергаю сомнению чужие слова - мои руки не самые прямые.
    - чужой файл зачем загружать, когда должны быть решения стандартными средствами.

    Я сделал так:
    1) В папку component/com_virtuemart/category/ добавил файл default_addtocart.php, который взял из соседней папки "productdetails"
    2) в файл com_virtuemart/category/default.php после строки
    PHP:
    <form method="post" class="product" action="index.php" id="addtocartproduct<?php echo $product->virtuemart_product_id ?>">
    добавил код

    PHP:
    <!-- Пытаемся вставить ручные поля  -->
      <?php // Product custom_fields
      
    if (!empty($product->customfieldsCart)) {  ?>
      <div class="product-fields">
          <?php foreach ($product->customfieldsCart as $field)
          { 
    ?><div style="display:inline-block;" class="product-field product-field-type-<?php echo $field->field_type ?>">
            <span class="product-fields-title" ><b><?php echo  JText::_($field->custom_title)?></b></span>
            <?php //echo JHTML::tooltip($field->custom_tip,  JText::_($field->custom_title), 'tooltip.png'); ?>
            <span class="product-field-display"><?php echo $field->display ?></span>
     
            <span class="product-field-desc"><?php echo $field->custom_field_desc ?></span>
            </div><br/ >
            <?php
          
    }
          
    ?>
      </div>
      <?php }
        
    /* Product custom Childs
        * to display a simple link use $field->virtuemart_product_id as link to child product_id
        * custom_value is relation value to child
        */
     
      
    if (!empty($product->customsChilds)) {  ?>
          <div class="product-fields">
            <?php foreach ($product->customsChilds as $field) {  ?>
                <div style="display:inline-block;" class="product-field product-field-type-<?php echo $field->field->field_type ?>">
                <span class="product-fields-title" ><b><?php echo JText::_($field->field->custom_title)?></b></span>
                <span class="product-field-desc"><?php echo JText::_($field->field->custom_value)?></span>
                <span class="product-field-display"><?php echo $field->display ?></span>
     
                </div><br/ >
                <?php
            
    ?>
          </div>
      <?php ?>
    Ниже у меня идёт код отвечающий за кнопку "добавить в корзину", которая тоже добавлена на странице категорий.
     
    ddddddddd67 нравится это.
  4. norka13

    norka13 Создатель

    Заблокирован
    Регистр.:
    23 фев 2009
    Сообщения:
    41
    Симпатии:
    2
    Ну если судить по вашему коду то выведет все настраиваемые поля. а их бывает очень много. Как бы сделать лимит на вывод 4-5 полей. Так красиво было бы.
     
  5. haidamaka

    haidamaka Постоялец

    Регистр.:
    9 окт 2011
    Сообщения:
    59
    Симпатии:
    13
    А может кто знает как сделать вывод группы полей с кастом позицией. Ведь это в стандартном функционале начиная с версии 2.0.1.
    http://forum.virtuemart.net/index.php?topic=97419.0
     
  6. kucjlbl

    kucjlbl Создатель

    Регистр.:
    27 авг 2009
    Сообщения:
    15
    Симпатии:
    0
    Присоединюсь, тоже интересует как вывести хотя бы 5 кастомных поля на странице категорий, с возможностью их отсортировать по надобности...
     
  7. wgt

    wgt Писатель

    Регистр.:
    8 окт 2011
    Сообщения:
    3
    Симпатии:
    0
    я бы делал так:
    для начала в шаблоне категории распечатал бы массив данных и посмотрел какие поля существуют:

    Код:
    echo '<pre>';       
    print_r($product->customfields);
    echo '</pre>';
    просмотрев и выбрав нужные можно вывести их так, проверяя существует ли это значение

    Код:
               
    if($product->customfields[1]->virtuemart_custom_id == 8){
           echo $product->customfields[1]->custom_value;
    }
     
  8. lara77775

    lara77775 Писатель

    Регистр.:
    15 сен 2011
    Сообщения:
    8
    Симпатии:
    0
    Выводит поля в странице категории, но как бы сделать, чтобы - если поля- аттрибут корзины, еще и цену самого товара в зависимости от значения полей меняли при этом

    и не найду строку такую <form method="post" class="product" action="index.php" id="addtocartproduct<?php echo $product->virtuemart_product_id ?>">
    в
    2) в файл com_virtuemart/category/default.php

    это наверное вывод цены на странице категории нужно корректировать
     
  9. lara77775

    lara77775 Писатель

    Регистр.:
    15 сен 2011
    Сообщения:
    8
    Симпатии:
    0
    я нашла то что мне нужно было - хотела на листе категории вывести изображение типа "новинка", вип", бюджетный" вот решение
    http://forum.virtuemart.net/index.php?topic=99225.msg344246#msg344246 - там много вариантов


    yep now its showing the image CF in the Category with products... it's working with:
    Code: [Select]
    <?php $custom_title = null;
    if (!empty(
    $product->customfields)) {
    foreach (
    $product->customfields as $field) {
    if (
    $field->is_hidden ) //OSP http://forum.virtuemart.net/index.php?topic=99320.0continue;
    if (
    $field->display) { ?>

    <span class="product-field-display"><?php echo $field->display ?></span>
    <?php } ?> <?php } ?> <?php } ?>
     
  10. vitoxa_ya

    vitoxa_ya Писатель

    Регистр.:
    10 июн 2012
    Сообщения:
    9
    Симпатии:
    0
    Если надо вывести только определённое поле или все поля кроме определенного(ных) можно поставить исключение на название поля или его, делается это так:
    PHP:
    <?php $custom_title null;
    if (!empty(
    $product->customfields)) {
    foreach (
    $product->customfields as $field) { if ($field->title == 'Картинка'):
    if (
    $field->is_hidden )
    if (
    $field->display) { ?>
    <span class="product-field-display"><?php echo $field->display ?></span>
    <?php ?> <?php endif; } ?> <?php ?>
    в этом коде будет выводиться только поле сназванием Картнка,
    не забываем перевести кодеровку в ANSI (без BOM) чтоб заработал код.