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

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

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

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

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

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

    denism300 Постоялец

    Регистр.:
    10 май 2014
    Сообщения:
    120
    Симпатии:
    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
    Сообщения:
    9
    Симпатии:
    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 изменения сотрутся. Придется добавлять заново!