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

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

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

Хак VM-3. Вывод полей из раздела "Габариты/Вес"

Тема в разделе "Virtuemart", создана пользователем denism300, 30 мар 2015.

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

    denism300 Постоялец

    Регистр.:
    10 май 2014
    Сообщения:
    121
    Симпатии:
    4
    Всем известно, что изначально из вкладки Габариты/Вес выводилось только "Количества товара в упаковке".
    Я решил исправить данный недостаток. В итоге получилось такое решение:
    1. В файле ваш_сайт\templates\ваш_шаблон\html\com_virtuemart\productdetails\default.php необходимо удалить следующий кусок кода:
    PHP:
    // Product Packaging
    $product_packaging = '';
        if ($this->product->product_box) {
        ?>
            <div class="product-box">
            <?php
                
    echo vmText::_('COM_VIRTUEMART_PRODUCT_UNITS_IN_BOX') .$this->product->product_box;
            
    ?>
            </div>
    <?php // Product Packaging END ?>
    2. Далее, переходим в папку ваш_сайт\templates\ваш_шаблон\html\com_virtuemart\sublayouts и создаем там файл с названием productparams.php, копируем в него нижепредставленный код:
    PHP:
    <?php
    /**
    * sublayout products
    */

    defined('_JEXEC') or die('Restricted access');

    $product $viewData['product'];

    /* переведем единицы измерения на русский язык */

    function translateUnits($en_units) {
        switch(
    $en_units) {
            case 
    'M':
                echo 
    'м';
                break;
            case 
    'CM':
                echo 
    'см';
                break;
            case 
    'MM':
                echo 
    'мм';
                break;
            case 
    'YD':
                echo 
    'ярд';
                break;
            case 
    'FT':
                echo 
    'фут';
                break;
            case 
    'IN':
                echo 
    'дюйм';
                break;
            case 
    'KG':
                echo 
    'кг';
                break;
            case 
    'G':
                echo 
    'г';
                break;
            case 
    'MG':
                echo 
    'мг';
                break;
            case 
    'LB':
                echo 
    'фунт';
                break;
            case 
    'OZ':
                echo 
    'унция';
                break;
            case 
    '1 100G':
                echo 
    '100 г';
                break;
            case 
    'SM':
                echo 
    'м<sup>2</sup>';
                break;
            case 
    'CUBM':
                echo 
    'м<sup>3</sup>';
                break;
            case 
    'L':
                echo 
    'л';
                break;
            case 
    '1 100ML':
                echo 
    'мл';
                break;
          
            default:
                echo 
    ' ';
                break;
        }
    }
    ?>
    <div class="product-parametrs">
        <span class="title"><?php echo JText::_('COM_VIRTUEMART_PRODUCT_PARAM_TITLE'?></span>
        <table class="product-param">
            <tbody>
                <?php //Длина товара
                
    if ($product->product_length != 0) { ?>
                    <tr class="product-param-tr">
                        <td class="product-param-name-td">
                            <span><?php echo JText::_('COM_VIRTUEMART_PRODUCT_LENGTH'?></span>
                        </td>
                        <td class="product-param-value-td">
                            <?php echo round($product->product_length2)  //Выводим длину ?>
                            <?php translateUnits($product->product_lwh_uom)  //Выводим единицу измерения ?>
                        </td>
                    </tr>
                <?php }
      
                
    //Ширина товара
                
    if ($product->product_width != 0) { ?>
                    <tr class="product-param-tr">
                        <td class="product-param-name-td">
                            <span><?php echo JText::_('COM_VIRTUEMART_PRODUCT_WIDTH'?></span>
                        </td>
                        <td class="product-param-value-td">
                            <?php echo round($product->product_width2)  //Выводим ширину ?>
                            <?php translateUnits($product->product_lwh_uom)  //Выводим единицу измерения ?>
                        </td>
                    </tr>
                <?php }
      
                
    //Высота товара
                
    if ($product->product_height!=0) { ?>
                    <tr class="product-param-tr">
                        <td class="product-param-name-td">
                            <span><?php echo JText::_('COM_VIRTUEMART_PRODUCT_HEIGHT'?></span>
                        </td>
                        <td class="product-param-value-td">
                            <?php echo round($product->product_height2)  //Выводим высоту ?>
                            <?php translateUnits($product->product_lwh_uom)  //Выводим единицу измерения ?>
                        </td>
                    </tr>
                <?php }
      
                
    //Вес товара
                
    if ($product->product_weight != 0) { ?>
                    <tr class="product-param-tr">
                        <td class="product-param-name-td">
                            <span><?php echo JText::_('COM_VIRTUEMART_PRODUCT_WEIGHT'?></span>
                        </td>
                        <td class="product-param-value-td">
                            <?php echo round($product->product_weight2)  //Выводим вес ?>
                            <?php translateUnits($product->product_weight_uom)  //Выводим единицу измерения ?>
                        </td>
                    </tr>
                <?php }
                  
                
    //Объем упаковки
                
    if ($product->product_packaging !=0) { ?>
                    <tr class="product-param-tr">
                        <td class="product-param-name-td">
                            <span><?php echo JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING'?></span>
                        </td>
                        <td class="product-param-value-td">
                            <?php echo round($product->product_packaging2//Выводим объем упаковки ?>
                            <?php translateUnits($product->product_unit//Выводим единицы измерения ?>
                        </td>
                    </tr>
                <?php }
                  
                
    //Количество в упаковке
                
    $product_packaging '';
                if (
    $product->product_box) { ?>
                    <tr class="product-param-tr">
                        <td class="product-param-name-td">
                            <span><?php echo JText::_('COM_VIRTUEMART_PRODUCT_UNITS_IN_BOX'?></span>
                        </td>
                        <td class="product-param-value-td">
                            <?php echo $product->product_box //Выводим количество в упаковке ?>
                            <?php echo ' шт' ?>
                        </td>
                    </tr>
                <?php // Product Packaging END ?>
            </tbody>
        </table>
    </div> 
    3. В файле ваш_сайт\templates\ваш_шаблон\html\com_virtuemart\productdetails\default.php в то место, где хотим вывести поля "Габариты\Вес" вставляем строку:
    PHP:
    <?php echo shopFunctionsF::renderVmSubLayout('productparams',array('product'=>$this->product,'position'=>'newtab')); ?>
    из плюсов данного решения:
    1. Можно вывести в любом удобном месте карточки товара
    2. Реализовано округление до сотых. Теперь не выводятся четыре нуля после точки.
    3. Реализован перевод единиц измерения на русский язык. Корявенько, конечно, но ничего умнее не придумал. Тому, кто предложит способ сократить функцию - буду благодарен
    4. Т.к. пункты 2 и 3 реализованы без вмешательства в код VM и БД, то при обновлении изменения не будут утеряны.

    На выходе у меня получилось так:
    [​IMG]
     
    kunev нравится это.
  2. Jetico

    Jetico Создатель

    Регистр.:
    28 окт 2016
    Сообщения:
    11
    Симпатии:
    0
    добавление собственных значений единиц измерения:

    /administrator/components/com_virtuemart/helpers/shopfunctions.php
    в районе 329 строки есть такой код:

    Код:
    $weight_unit_default = array(
              'PCS' => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_KG')
            , '100G' => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_100G')
            , 'м'   => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_M')
            , 'SM'   => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_SM')
            , 'CUBM'   => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_CUBM')
            , 'L'   => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_L')
            , '100ML'   => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_100ML')
            );
    в него добавляем
    Код:
    Код:
    'шт'   => vmText::_ ('шт')
    только не забыть поставить "запятую", у меня получилось так.
    Код:
    Код:
    $weight_unit_default = array(
                'шт'   => vmText::_ ('шт')
            , 'PCS' => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_KG')
            , '100G' => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_100G')
            , 'м'   => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_M')
            , 'SM'   => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_SM')
            , 'CUBM'   => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_CUBM')
            , 'L'   => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_L')
            , '100ML'   => vmText::_ ('COM_VIRTUEMART_UNIT_SYMBOL_100ML')
            );
    При обновлении VM изменения сотрутся. Придется добавлять заново!
     
  3. Voro

    Voro Создатель

    Регистр.:
    4 сен 2015
    Сообщения:
    34
    Симпатии:
    4
    Не очень удобный вариант. Куда проще в этом случае либо переопределять имеющиеся единицы измерения в те, что нужно. Например, м3, если не используются, можно определить как шт. Но сделать это следует в шаблоне. Тогда изменения не затрутся обновлением.

    А кто-нибудь знает как вывести единицы измерения в списке товаров? Цена там выводится в каждом товаре, а вот единицу измерения к цене если поставить, тоже в код лезть, чтобы потом затёрлись изменения? Или есть более щадящий метод?
     
  4. denism300

    denism300 Постоялец

    Регистр.:
    10 май 2014
    Сообщения:
    121
    Симпатии:
    4
    Я как-то для своего проекта делал Перейти по ссылке, если, конечно, мы об одном и том же говорим.