Jump to content

Recommended Posts

Есть каталог и товары только в подкатегориях.

 

Категория 1

    Подкатегория 1.1

    Подкатегория 1.2

Категория 2

 

Если в админке поменять местами подкатегории и расставить так:

 

Категория 1

    Подкатегория 1.2

    Подкатегория 1.1

Категория 2

 

то на сайте порядок товаров какой был, такой и останется, то есть заходя в Категория 1, сначала будут идти товары Подкатегория 1.1.

 

Как сделать, чтобы товары сортировались согласно порядку подкатегорий?

 

 

 

 

Link to post
Share on other sites

сделайте в api/Products.php новую сортировку по айди категории+позиция на подобии как реализованы другие сортировки. только если у товара будет 2 категории например, то брать первую.

Link to post
Share on other sites

сделайте в api/Products.php новую сортировку по айди категории+позиция на подобии как реализованы другие сортировки. только если у товара будет 2 категории например, то брать первую.

 

Помоги, пожалуйста, сделать, а то не соображу как сделать сортировку по позиции.

Link to post
Share on other sites

попробуйте в api/Products.php в ф-ю get_products(..) добавить после

 

case 'created':
$order = 'p.created DESC';
break;

добавить

case 'category':
$order = '(SELECT category_id FROM __products_categories WHERE product_id = p.id LIMIT 1), p.position DESC';
break;

 

 

и в view/ProductsView.php поменять

$filter['sort'] = 'position';

на

$filter['sort'] = 'category';
Link to post
Share on other sites

По-моему, что предлагаемый метод далек от того, что просил ТС, то есть "сделать сортировку по позиции".

1. В простых случаях (когда у каждого товара ОДНА категория), метод сортирует по ID категории.

2. В сложных (когда встречаются товары, входящие в несколько категорий) будет вообще непредсказуемый хаос...

Link to post
Share on other sites

как всегда только бы ляпнуть

 

По-моему, что предлагаемый метод далек от того, что просил ТС, то есть "сделать сортировку по позиции".

 

ТС просил сделать сортировку по категории + позиция. читаем внимательно.

 

 

 1. В простых случаях (когда у каждого товара ОДНА категория), метод сортирует по ID категории.

 

сортировка проходит вообще-то по двум полям, возможно стоит еще раз посмотреть. я указал два поля

 

 

 2. В сложных (когда встречаются товары, входящие в несколько категорий) будет вообще непредсказуемый хаос...

 

не уверен в ваших словах. при нескольких категориях будет выбираться всегда первая запись из базы с position 0; и по ней будет идти сортировка. в списке товаров. если человек находится в конкретной категории можно добавить еще вместо 

 

$filter['sort'] = 'category';

 

условие для категории в которой нет дочерних

if(empty($category->children))
  $filter['sort'] = 'position';
else
  $filter['sort'] = 'category';

знаете лучший способ, не вижу ваших сообщений с решением.

Edited by mishanya
Link to post
Share on other sites

ТС просил сделать сортировку по категории + позиция. читаем внимательно.

 

1. В #1 ТС просил "чтобы товары сортировались согласно порядку подкатегорий". В #3 ТС просил "не соображу как сделать сортировку по позиции".

2. Вы же написали "сортировку по категории". Это, строго говоря, бессмыслица.

3. В реальности у Вас сортирует по ID подкатегорий, а не по порядку подкатегорий.

 

сортировка проходит вообще-то по двум полям, возможно стоит еще раз посмотреть. я указал два поля

 

Да, Вы указали ДВА поля

$order = '(SELECT category_id FROM __products_categories WHERE product_id = p.id LIMIT 1), p.position DESC';

 

Первое поле - это именно ID категории, к которой относится товар (будем для простоты считать, что у товара ОДНА категория).

Выходит, сортируется по ID категории, а внутри блоков с одинаковыми ID - по позициям.  А ТС-то просил не по ID категории, а по порядку категорий.

 

 

 

Если и после этого еще непонятно, прочтите еще раз #1, там ТС ведет речь про то, что если "в админке поменять местами подкатегории", то и результат сортировки должен измениться. А в Вашем методе - как ни меняй,  будет все одинаково...

Link to post
Share on other sites

 Если и после этого еще непонятно, прочтите еще раз #1, там ТС ведет речь про то, что если "в админке поменять местами подкатегории", то и результат сортировки должен измениться. А в Вашем методе - как ни меняй,  будет все одинаково...

 

либо вы тупой либо я либо лыжи не едут.

 

где тут  написано что если изменить местами категории то результат должен поменяться?

 

 

 Если в админке поменять местами подкатегории и расставить так:

 

 ...

то на сайте порядок товаров какой был, такой и останется, то есть заходя в Категория 1, сначала будут идти товары Подкатегория 1.1.

Edited by mishanya
Link to post
Share on other sites

Вот тут соглашусь с корсом, именно в первом посте прямо написано, что при изменении ПОРЯДКА категорий должен меняться вывод, т.е. сортировать надо конкретно по position категории

Link to post
Share on other sites

Вот тут соглашусь с корсом, именно в первом посте прямо написано, что при изменении ПОРЯДКА категорий должен меняться вывод, т.е. сортировать надо конкретно по position категории

 

так выходит что нет, либо я чего-то не понимаю. ТС написал

 

 

Если в админке поменять местами подкатегории и расставить так:

 

то на сайте порядок товаров какой был, такой и останется, то есть заходя в Категория 1, сначала будут идти товары Подкатегория 1.1.

 

что значит если поменять порядок категорий - изменятся позиции. при этом сортировка не должна меняться.

и дальше написано, что нужно сортировать по порядку категорий, видимо до сортировки, то есть как создали их изначально. потому что выше написано что порядок не должен меняться

 

 

Как сделать, чтобы товары сортировались согласно порядку подкатегорий?

Link to post
Share on other sites

ТС, конечно, написал задание в #1 не образцово, но понять можно.
 
У него сказано:

Если в админке поменять местами подкатегории и расставить так:
 
Категория 1
    Подкатегория 1.2
    Подкатегория 1.1
Категория 2
 
то на сайте порядок товаров какой был, такой и останется, то есть заходя в Категория 1, сначала будут идти товары Подкатегория 1.1.
 
Как сделать, чтобы товары сортировались согласно порядку подкатегорий?

 
Он сначала сказал о текущем положении на его сайте "Если поменять местами подкатегории ... " (то есть изменить их порядок), то "на сайте порядок товаров какой был, такой и останется". А затем уже спросил "Как сделать, чтобы..."
Вроде бы тут однозначно выходит - если сейчас не меняется, то значит, НАДО ЧТОБ МЕНЯЛОСЬ.
 

и дальше написано, что нужно сортировать по порядку категорий, видимо до сортировки, то есть как создали их изначально.

 

То есть сортировать по каким-то старым позициям, которая были в позапрошлом году?
Даже если Вы и так поняли, несмотря на всю бессмысленность такой постановки вопроса, Ваше решение никак не делает такого, ибо сортирует по ID подкатегорий.
Хорошо Вы сказали:

 

либо вы тупой либо я либо лыжи не едут.

Edited by Kors
Link to post
Share on other sites

Делаем как в посте #4 от Мишани, только в 1м действии добавляем это:

case 'category':
     if(!empty($filter['category_id']))
      $order = $this->db->placehold("FIELD(pc.category_id, ?@), p.position",  (array)$filter['category_id']);
    break;
Link to post
Share on other sites

 

Делаем как в посте #4 от Мишани, только в 1м действии добавляем это:

case 'category':
     if(!empty($filter['category_id']))
      $order = $this->db->placehold("FIELD(pc.category_id, ?@), p.position",  (array)$filter['category_id']);
    break;

 

Шикарное решение! Просто великолепно!

Link to post
Share on other sites

Всем спасибо большое за участие!!!
Все получилось!!
 
Выкладываю рабочий вариант, может кому пригодится.
 
1. В  api/Products.php в ф-ю get_products(..) добавить после

case 'created':
$order = 'p.created DESC';
break;

добавить

case 'category':
     if(!empty($filter['category_id']))
      $order = $this->db->placehold("FIELD(pc.category_id, ?@), p.position",  (array)$filter['category_id']);
 break;

 

2. В view/ProductsView.php заменить

$filter['sort'] = 'position';

на

$filter['sort'] = 'category';

 

3. В файле products.tpl вашего шаблона (везде, где будет сортировка) добавить:

<a {if $sort=='category'} class="selected"{/if} href="{url sort=category page=null}">Свой сортировка</a>
Link to post
Share on other sites

 

Всем спасибо большое за участие!!!

Все получилось!!

 

Выкладываю рабочий вариант, может кому пригодится.

 

1. В api/Products.php в ф-ю get_products(..) добавить после

case 'created':
$order = 'p.created DESC';
break;
добавить
case 'category':
     if(!empty($filter['category_id']))
      $order = $this->db->placehold("FIELD(pc.category_id, ?@), p.position",  (array)$filter['category_id']);
 break;
2. В view/ProductsView.php заменить
$filter['sort'] = 'position';
на
$filter['sort'] = 'category';
3. В файле products.tpl вашего шаблона (везде, где будет сортировка) добавить:
<a {if $sort=='category'} class="selected"{/if} href="{url sort=category page=null}">Свой сортировка</a>
Спасибо пригодится. Есть пару задумок для такого дела, но я использовал виджет get-products, пока для меня он гибче Edited by Maksclub
Link to post
Share on other sites
  • 1 month later...

Здравствуйте подскажите, что не так в шаблоне, почему не работает сортировка:

{if $products}
    {if $products|count>0}
    <div class="sort-box clearfix">
        <label class="label" for="sort">Сортировать по:</label>
        
        {if $sort=='price'}<span>умолчанию</span>{else}<a href="{url sort=position page=null}">умолчанию</a>{/if}
        {if $sort=='price'}<span>цене</span>{else}<a href="{url sort=position page=null}">цене</a>{/if}
        {if $sort=='name'}<span>названию</span>{else}<a href="{url sort=position page=null}">названию</a>{/if}
        
        
        <label class="select-sm">
            <select id="sort">
                <option {if $sort=='position'} selected="selected"{/if} value="{url sort=position page=null}">умолчанию</option>
                <option {if $sort=='price'}    selected="selected"{/if} value="{url sort=price page=null}">цене</option>
                <option {if $sort=='name'}     selected="selected"{/if} value="{url sort=name page=null}">названию</option>
            </select>
        </label>
        
        <div id="view" class="view">
            <a href="url sort=position page=null" class="grid  {if $view == 'grid'} current{/if}" data-view="grid">сеткой</a>
            <a href="#" class="list  {if $view == 'list'} current{/if}" data-view="list">списком</a>
            <a href="#" class="table {if $view == 'table'} current{/if}" data-view="table">таблицей</a>
        </div>
        
    </div>
    {/if} 
Link to post
Share on other sites

Здравствуйте подскажите, что не так в шаблоне, почему не работает сортировка:

 

Что у Вас "не так в шаблоне", сказать невозможно, не зная Вашего шаблона.

В приведенном фрагменте "не так" то, что открывается вначале два {if}, а в конце закрывается только один {/if}.

Еще в приведенном фрагменте в части <select id="sort">...</select> нечто странное. Как будто просто копировали без особого понимания. Чтобы такое осмысленно работало, надо писать JS под этот фрагмент.

Почему "не работает сортировка" тоже сказать сложно, не зная всех деталей того, что Вы натворили.

 

Почини мне то, не скажу что...

Link to post
Share on other sites

Что у Вас "не так в шаблоне", сказать невозможно, не зная Вашего шаблона.

В приведенном фрагменте "не так" то, что открывается вначале два {if}, а в конце закрывается только один {/if}.

Еще в приведенном фрагменте в части <select id="sort">...</select> нечто странное. Как будто просто копировали без особого понимания. Чтобы такое осмысленно работало, надо писать JS под этот фрагмент.

Почему "не работает сортировка" тоже сказать сложно, не зная всех деталей того, что Вы натворили.

 

Почини мне то, не скажу что...

Я ничего не творила, Молодой человек поставил шаблон, просила его доделать нормально, как было заявлено. Получила отказ. А еще мало того, начал воровать - сносить всё с сайта, пока мне служба поддержки не помогла и не заблокировала все входы.

Вот такая печалька. а доработок теперь просто немеренно....

Link to post
Share on other sites

Я ничего не творила, Молодой человек поставил шаблон, просила его доделать нормально, как было заявлено. Получила отказ. А еще мало того, начал воровать - сносить всё с сайта, пока мне служба поддержки не помогла и не заблокировала все входы.

Вот такая печалька. а доработок теперь просто немеренно....

Тогда так:

Почему "не работает сортировка" - сказать сложно, не зная всех деталей того, что натворили Вы или "Молодой человек" - Ваш работник.

 

Можно только посочувствовать.

 

Если готовы оплачивать - обращайтесь...

Link to post
Share on other sites
  • 2 months later...

Есть каталог и товары только в подкатегориях.

 

Категория 1

    Подкатегория 1.1

    Подкатегория 1.2

Категория 2

 

Если в админке поменять местами подкатегории и расставить так:

 

Категория 1

    Подкатегория 1.2

    Подкатегория 1.1

Категория 2

 

то на сайте порядок товаров какой был, такой и останется, то есть заходя в Категория 1, сначала будут идти товары Подкатегория 1.1.

 

Как сделать, чтобы товары сортировались согласно порядку подкатегорий?

 

Друзья,

а как сделать так, чтоб при открытие Категория 1 отображались товары согласно порядку подкатегории а также и по позиции товаров в этих Подкатегориях?

то есть

 

Категория 1 (согласно позиции подкатегории)+(согласно позиции товаров)

    Подкатегория 1.1 (согласно позиции товаров)

    Подкатегория 1.2 (согласно позиции товаров)

 

Согласно позиции подкатегории выше сделано, за что большое спасибо, а вот с позициями товаров ?

Link to post
Share on other sites

Друзья,

а как сделать так, чтоб при открытие Категория 1 отображались товары согласно порядку подкатегории а также и по позиции товаров в этих Подкатегориях?

то есть

 

Категория 1 (согласно позиции подкатегории)+(согласно позиции товаров)

    Подкатегория 1.1 (согласно позиции товаров)

    Подкатегория 1.2 (согласно позиции товаров)

 

Согласно позиции подкатегории выше сделано, за что большое спасибо, а вот с позициями товаров ?

 

и в чем заключается логика? Как вы себе это представляете?

Link to post
Share on other sites

и в чем заключается логика? Как вы себе это представляете?

 

внес изменения позиции товаров в подкотегории, например в Подкатегория 1.1, а также в Подкатегория 1.2.

 

При нажатие главной Категория 1, чтоб сортировка категории, как ранее сделали, а также показала все товары с подкатегории:

Подкатегория 1.1

Подкатегория 1.2

 

но только в том порядке, в котором товары распределены также как и в Подкатегориях ранее.

 

Надеюсь подробно объяснил?!

Edited by DarAmal
Link to post
Share on other sites

То что вы описываете - есть в решении выше. Сначала в приорите категории затем позиции товаров

 

С категориями все отлично показывает. Но товары сортируются по ID, а не по позиции ((

сколько меняешь позиции товаров в подкатегории, все равно выдает по ID

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...