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

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

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

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

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

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

    denism300 Постоялец

    Регистр.:
    10 май 2014
    Сообщения:
    124
    Симпатии:
    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
    Сообщения:
    35
    Симпатии:
    4
    Не очень удобный вариант. Куда проще в этом случае либо переопределять имеющиеся единицы измерения в те, что нужно. Например, м3, если не используются, можно определить как шт. Но сделать это следует в шаблоне. Тогда изменения не затрутся обновлением.

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

    denism300 Постоялец

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

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    634
    Симпатии:
    125
    Из того, что я встречал - придётся делать это настраиваемыми полями и по ним фильтровать, например с помощью Custom Filters .
    То есть заполнять габариты в другом месте.
     
  6. denism300

    denism300 Постоялец

    Регистр.:
    10 май 2014
    Сообщения:
    124
    Симпатии:
    4
    ну либо писать плагин, либо искать готовый. были где-то фильтры для VM
    <-------------- добавлено через 7679 сек. -------------->
    я не сталкивался с такой задачей.
    но, если так, то вариант один - писать свой модуль
     
  7. aka-Taurus

    aka-Taurus Создатель

    Регистр.:
    18 авг 2017
    Сообщения:
    16
    Симпатии:
    59
    Подскажите как сделать фильтрацию товара по данным из "Габариты/Вес"?
    <-------------- добавлено через 9855 сек. -------------->
    подскажите как автоматизировать заполнение настраиваемых полей (что бы значения брались с "Габариты/Вес"?)
    <-------------- добавлено через 496 сек. -------------->
    пробовал залить эти значения в кастомные поля с помощью CSVI Pro, в карточке товара появляются соответствующие поля, но значения не присваеваются [​IMG] [​IMG]
    <-------------- добавлено через 62 сек. -------------->
    Перейти по ссылке
    Перейти по ссылке
    <-------------- добавлено через 1025 сек. -------------->
    надыбал SQL запрос, но не могу в нём раздуплиться:
    Код:
    UPDATE rwvd8_virtuemart_customs, rwvd8_virtuemart_product_customfields, etrade_products
    SET rwvd8_virtuemart_product_customfields.custom_value=etrade_products.tov_size
    WHERE rwvd8_virtuemart_customs.custom_title='Размер'
    AND rwvd8_virtuemart_product_customfields.virtuemart_custom_id= rwvd8_virtuemart_customs.virtuemart_custom_id
    AND etrade_products.tov_id= rwvd8_virtuemart_product_customfields.virtuemart_product_id;;;
    INSERT INTO rwvd8_virtuemart_product_customfields (virtuemart_product_id, virtuemart_custom_id, custom_value)
    SELECT etrade_products.tov_id, (SELECT virtuemart_custom_id FROM rwvd8_virtuemart_customs WHERE custom_title='Размер' GROUP BY virtuemart_custom_id) as virtuemart_custom_id, etrade_products.tov_size
    FROM etrade_products WHERE etrade_products.tov_id
    NOT IN (SELECT virtuemart_product_id FROM rwvd8_virtuemart_product_customfields WHERE virtuemart_custom_id=(SELECT virtuemart_custom_id FROM rwvd8_virtuemart_customs WHERE custom_title='Размер' GROUP BY virtuemart_custom_id));;;