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

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

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

[Помощь] Смена отображения вида в категории

Тема в разделе "Virtuemart", создана пользователем rusdin, 12 фев 2013.

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

    rusdin Постоялец

    Регистр.:
    7 фев 2013
    Сообщения:
    62
    Симпатии:
    44
    Всем привет! Озадачился реализацией одной функцией: чтоб в категории товаров где выводится список товаров была Сортировка вернее возможность выбора расположения товара ( По 1 товару в строку, по 2 товара и.т.д.) Увидел похожий вариант в шаблоне http://demo.smartaddons.com/#sj-hitech (Не подумайте что реклама). Также реализовано подобное http://www.mijosoftdemo.com/mijoshop/laptops-notebooks рядом с сортировкой! Метод проб и ошибок выдергивания кода из шаблона, принесли больше ошибок и глюков. Обращаюсь к Вам возможно кто-то уже реализовывал или понимает что необходимо! Понимаю что править нужно default.php Многие начинающие создатели сайтов на virtuemart скажут спасибо за данную реализацию! Сильно не пинайте если подобное уже обсуждалось. Поиском пользовался но не нашел! Joomla 2.5.9, Virtuemart 2.0.18a
     
  2. Genk0

    Genk0 Инквизитор из раздела J!

    Moderator
    Регистр.:
    2 июн 2010
    Сообщения:
    1.627
    Симпатии:
    1.329
    Работаю с этим шаблоном, купленным заказчиком, а вот и основной рабочий код, отвечающий за пересорт:
    PHP:
    $layout_type_link = $('#option_com .layout-type a');
    $(
    '#option_com .layout-type a.sort_listing').addClass('active');
    $container.addClass('layout-listing');
    $container.isotope('reLayout');
    var 
    f_layout = function (){
    var 
    $this = $(this);
    $(
    '#option_com .layout-type a').removeClass('active');
    $this.addClass('active');
    if (
    $this.hasClass('sort_listing')){
    $container.removeClass('layout-table');
    $container.addClass('layout-listing');
    $container_table_search.find('.item .item-inner').css('height','auto');
    $container.isotope('reLayout');
    $.
    cookies.set('layout_container','layout-listing')
    }
    if (
    $this.hasClass('sort_grid')){
    $container.removeClass('layout-listing');
    $container.addClass('layout-table');
    $container_table_search.find('.item .item-inner').css('height',h_search_item);
    $container.isotope('reLayout');
    $.
    cookies.set('layout_container','layout-table')
    }
    }
    $layout_type_link.bind('click'f_layout);
     
    var 
    layout_cookies = $.cookies.get('layout_container');
    if (
    layout_cookies == 'layout-listing'){
    $(
    '#option_com .layout-type a').removeClass('active');
    $(
    '#option_com .layout-type a.sort_listing').addClass('active');
    $container.removeClass('layout-table');
    $container.addClass('layout-listing');
    $container_table_search.find('.item .item-inner').css('height','auto');
    $container.isotope('reLayout');
    }
     
    // reLayout
    $(window).resize(function(){
    $container.isotope('reLayout');
    // Keep main menu
    if($(".group-main-top") && $('#content_main')){
    offsetleft = $("#content_main").offset().left;
    $(
    ".group-main-top").css('left'offsetleft+'px');
    $(
    "#option_com").css('left'offsetleft+15+'px');
    }
    }
    Все остальное должно быть понятно.
    Так же в сети УЖЕ есть рабочие варианты решения задачи и под вирт 1 и вирт 2.
     
    Тимур1990 нравится это.
  3. melitrom

    melitrom

    Регистр.:
    29 июн 2011
    Сообщения:
    300
    Симпатии:
    34
    Для VM1

    в browse_header_category.tpl.php

    Код:
    <form id="vid" name="vid" action="<?php echo JURI::getInstance()->tostring();?>" method="post">
    <input type="submit" value="1" name="variant1">
    <input type="submit" value="2" name="variant2">
    </form>
    в shop.browse.php - в самом низу кода заменить строку: echo $tpl->fetch( $tpl->config->get( 'productListStyle' ) );

    Код:
    <?php
    $variant1 = JRequest::getVar('variant1', '');
    $variant2 = JRequest::getVar('variant2', '');
    $session =& JFactory::getSession();
    if ($variant1) $session->set("variant", $variant1);
    if ($variant2) $session->set("variant", $variant2);
    $variant = $session->get("variant", 1);
    if ($variant ==1  ) {
    echo $tpl->fetch( 'browse/includes/browse_notables.tpl.php' ) ;
    } else {
    echo $tpl->fetch( 'browse/includes/browse_listtable.tpl.php' );
    }
    ?>
     
  4. rusdin

    rusdin Постоялец

    Регистр.:
    7 фев 2013
    Сообщения:
    62
    Симпатии:
    44
    Выдает ошибку! Копирую в default.php. Я не силен в php. Что не так делаю?

    Parse error: syntax error, unexpected '(', expecting T_VARIABLE or '$' in /home/..../components/com_virtuemart/views/category/tmpl/default.php on line 54

    Пытаюсь выдернуть код с шаблона указанного выше. Кнопки появляются но не рабочие!
    Код:
    <div id="option_com">
     
                        <?php //echo $this->orderByList['orderby']; ?>
     
                        <div class="sort_item">
     
                            <div class="sort_by">
     
                                <div class="active-order"><!--<span><?php //echo JTEXT::_('SORT_BY'); ?></span>--><span class="sort-style"><?php echo JTEXT::_('CHOOSE_AN_OPTION'); ?></span><span class="sort-ad" style=""></span></div>
     
                                <div style="display:none;" id="sort-by" class="option-set clearfix" data-option-key="sortBy">
     
                                    <a href="#sortBy=original-order" data-option-value="original-order" class="selected"><?php echo JTEXT::_('ORIGINAL_ORDER'); ?></a>
     
                                    <a href="#sortBy=random" data-option-value="random"><?php echo JTEXT::_('RANDOM_ORDER'); ?></a>
     
                                    <a href="#sortBy=vm_price" data-option-value="vm_price"><?php echo JTEXT::_('PRICE_ORDER'); ?></a>   
     
                                    <a href="#sortBy=vm_title" data-option-value="vm_title"><?php echo JTEXT::_('TITLE_ALPHABETICAL'); ?></a>
     
                                    <a href="#sortBy=vm_category_name" data-option-value="vm_category_name"><?php echo JTEXT::_('CATEGORY_NAME_ORDER'); ?></a>
     
                                    <a href="#sortBy=vm_mf_name" data-option-value="vm_mf_name"><?php echo JTEXT::_('MF_NAME_ORDER'); ?></a>
     
                                    <a href="#sortBy=vm_product_s_desc" data-option-value="vm_product_s_desc"><?php echo JTEXT::_('PRODUCT_S_DESC_ORDER'); ?></a>
     
                                    <a href="#sortBy=vm_product_in_stock" data-option-value="vm_product_in_stock"><?php echo JTEXT::_('PRODUCT_IN_STOCK_ORDER'); ?></a>
     
                                    <a href="#sortBy=vm_product_sku" data-option-value="vm_product_sku"><?php echo JTEXT::_('PRODUCT_SKU_ORDER'); ?></a>                       
     
                                  </div>
     
                              </div>
     
                            <div class="sort_direction" style="display:none;">
     
                                <h1>Sort direction</h1>
     
                                <div id="sort-direction" class="option-set clearfix" data-option-key="sortAscending">
     
                                    <a href="#sortAscending=true" data-option-value="true" class="sort_ascending selected">sort ascending</a>
     
                                    <a href="#sortAscending=false" data-option-value="false" class="sort_descending">sort descending</a>
     
                                </div>
     
                            </div>
     
                        </div>
     
                        <div class="layout-type">
     
                            <a href="javascript: void(0)" class="sort_grid">Table</a>
     
                            <a href="javascript: void(0)" class="sort_listing">Listing</a>
     
                        </div>
     
                    </div>
     
  5. dosqa

    dosqa Постоялец

    Регистр.:
    2 янв 2013
    Сообщения:
    133
    Симпатии:
    96
    Очень интересует эта тема, может кто нибудь разжевать поподробней на примере SJ AppStore Hi-tech.
    Интересует как добавить другие виды отображения и какие файлы за это отвечают.
    Немного полазив в интернете наткнулся на isotope.js он имеет к этому какое то отношение?
    Не силен в сайтостроении, но очень хочется это освоить:)
     
  6. artserge

    artserge Создатель

    Регистр.:
    4 ноя 2012
    Сообщения:
    31
    Симпатии:
    8
    еще можно переключать не через JS а через вид отображения - возможно так будет проще, а то без умных мыслей передирать чужой код - нехорошо...

    /?view=table

    /?view=price

    можно как GET параметр и потом его обработать в шаблоне категории
    PHP:
    if ( $_GET['view']  == 'table') { /*вывод для таблицы*/ } else if ( $_GET['view']  == 'price') { /*вывод для прайса*/ }
    или создать соотв. шаблоны с именами как в параметре передаваемом (где-то такое видел) - они подгружались автоматом...

    ну и закрыть такие линки в роботс чтоб не плодить дубли

    Сейчас вот делаю смену вывода товаров с вида "один товар в строке" на "таблица 3 товара в строке", делаю через JS

    Вверх страницы вставил мой селектор
    Код:
    <div class="catalog-item-view">
                <a title="Список" id="change-list" class="list selected" href="#" onclick="return false;"></a>
                <a title="Таблица" id="change-table" class="table" href="#" onclick="return false;"></a>
        </div>
    
    шаблон категории отдает разметку всю как для вида "Список".

    Клики обрабатываю на jquery
    Код:
    $('#change-list').click(function() {
        display('list');
    });
    
    $('#change-table').click(function() {
        display('grid');
    });
    
    Далее ввел функцию display(view) на JS - обработчик того что надо делать с хтмл-ом

    полный текст ее приводить нет смысла, скажу только что лучше всего сразу сделать верстку так чтоб добавлением класса весь вид менялся, и не нужно было модифицировать DOM - если вы будете перемещать блок где кнопка "купить" - нужно делать реинициализацию скриптов повешенных на нее- я взял код от разработчика плагина аякс-фильтра )))
    Код:
        SqueezeBox.assign($$('a.modal'), {parse: 'rel'});
        jQuery(document).ready(function($) {
          $('.orderlist-container').hover(
            function() { $(this).find('.order-list').stop().show()},
            function() { $(this).find('.order-list').stop().hide()}
          );
          Virtuemart.product($("form.product"));
          $("form.js-recalculate").each(function(){
            if ($(this).find(".product-fields").length) {
              var id= $(this).find('input[name="virtuemart_product_id[]"]').val();
              Virtuemart.setproducttype($(this),id);
    
            }
          });
        });
    
    в ней меняю хтмл код "налету", и пишу в куки выбранное состояние:

    $.cookie('display', 'list');

    или

    $.cookie('display', 'grid');


    А потом запихал код
    Код:
    view = $.cookie('display');
    if (view) {
        display(view);
    } else {
        display('list');
    }
    для проверки какой вид выбрал пользователь, и грузим его при обновлении страницы или переходе по магазину. Для использования метода $.cookie надо подгрузить библиотеку jquery.cookie.js
     
  7. cesah

    cesah Постоялец

    Регистр.:
    5 окт 2011
    Сообщения:
    61
    Симпатии:
    6
    А если попробовать так:
    сделать ссылку вида
    <a href="<?php echo JURI::current()?>?layout=table/list">
    И в шаблон прописать 2 варианта событий

    Код:
    $layout = JRequest::getCmd('layout', 'table');
     
    switch ($layout)
    {
    case 'table':
    ?>
    код 1
    <?php
    case 'list':
    ?>
    код 2
    <?php
    }
     
  8. holspen

    holspen Писатель

    Регистр.:
    28 янв 2014
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте, кто может в более понятной для начинающих форме объяснить, как решить эту задачу для Virtuemart 2?
     
  9. denis2014

    denis2014

    Регистр.:
    27 фев 2014
    Сообщения:
    156
    Симпатии:
    137
    Вопрос актуален на ВМ2.
    Ну неужели нет подобного модуля?
     
    Последнее редактирование: 20 ноя 2014
  10. dimon7772

    dimon7772 Постоялец

    Регистр.:
    1 май 2013
    Сообщения:
    123
    Симпатии:
    22
    Тут есть обсуждение подобного модуля, но он выводит товары отдельно от вирта, их он и переключает.
     
    denis2014 нравится это.