Тема: Вывод хитов

В стандартной форме поиска есть такой вариант — "Сортировка по: Сначала хиты". То есть в результатах вываливаются сначала "хиты", а потом всё остальное.
Очень нужно, чтобы в результатах появлялись только "хиты", без остальных 100500 товаров. Научите пожалуйста, как это сделать? Пожалуйста-пожалуйста-пожалуйста.

Thumbs up Thumbs down

2 Отредактировано support (02-08-2011 19:53:00)

Re: Вывод хитов

application\modules\shop\category.php

заменить
case 'hit':
        $products = $products->orderByHit(Criteria::DESC);
break;

на

case 'hit':
       $products = $products->filterByHit(True);
break;

Люди меняются, времена меняются, результат остается...

Thumbs up +1 Thumbs down

3

Re: Вывод хитов

SoulShockers пишет:

application\modules\shop\category.php

заменить
case 'hit':
        $products = $products->orderByHit(Criteria::DESC);
break;

на

case 'hit':
       $products = $products->filterByHit(True);
break;


Огромное, нечеловеческое спасибо!

Thumbs up Thumbs down

4

Re: Вывод хитов

У меня тоже проблема с хитами. У меня в сайдбаре выводятся хиты через код:

<h3>Хиты продаж</h3>
<ul class="products">
{$count = 1}
{foreach $hits as $p}
<li class="{counter('', '', 'last')}">
<a href="{shop_url('product/'.$p->getUrl())}" class="name">{echo ShopCore::encode($p->getName())}</a>
<a href="{shop_url('product/'.$p->getUrl())}">
<img src="{productImageUrl($p->getId().'_small.jpg')}" border="0" width="150" alt="image" style="clear:both;" /></a>
<div class="price">
{$p->firstVariant}
{if $p->hasDiscounts()}
<s>{echo $p->firstVariant->toCurrency('origPrice')} {$CS}</s>
<br/><span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
{else:}<span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>{/if}  
<a href="{shop_url('compare/add/' . $p->getId())}" class="compare" style="float:right; margin-right:30px;">Сравнить</a>          
</div>
</li>
{if $count == 3}<li class="separator"></li> {$count=0}{/if}
{$count++}
{/foreach}
</ul>

Как установить кол-во хитов? И как сделать, чтобы при переходе на любую другую страницу сайта, этот блок продолжал работать? Говорю, потому что при заходе на категорию, блок хиты, становится пустым. Что делать?

Простое правило программиста будь проще

5

Re: Вывод хитов

попробуйте count($hits)

Люди меняются, времена меняются, результат остается...

Thumbs up Thumbs down

6

Re: Вывод хитов

И как сделать, чтобы при переходе на любую другую страницу сайта, этот блок продолжал работать? Говорю, потому что при заходе на категорию, блок хиты, становится пустым. Что делать?

Большинство вопросов можно решить самому методом банального поиска по каталогу с маской файлов(notepad++)!
Хиты выводятся в шаблоне start_page, значит ищем каким скриптом этот шаблон "рендериться:)", application\modules\shop\shop.php

public function index()

hits'=>$this->_getHits(6),

и вуаля, мы нашли чем выводить хиты:

public function _getHits($limit = 10)
    {
        return  SProductsQuery::create()
                ->orderByCreated('DESC')
                ->filterByHit(true)
                ->filterByActive(true)
                ->limit(6)
                ->find();
    }

Люди меняются, времена меняются, результат остается...

Thumbs up Thumbs down

7

Re: Вывод хитов

Странно, но при попытки сделать в шаблоне так:
{$hit = SProductsQuery::create()->orderByCreated('DESC')->filterByHit(true)->filterByActive(true)->limit(6)->find()}
Я получаю невнятный список, типа
Id:
Name:
...
Как сделать чтобы это был массив? Пробовал регулярные выражения, но чёт замутно выходит, как проще сделать?

Простое правило программиста будь проще

8

Re: Вывод хитов

все нормально, по том "списке))" просто приходитесь циклом foreach. опять же смотрите в то что уже реализовано. Если что не понятно, обращайтесь  wink

Люди меняются, времена меняются, результат остается...

Thumbs up Thumbs down

9

Re: Вывод хитов

все нормально, по том "списке))" просто приходитесь циклом foreach. опять же смотрите в то что уже реализовано. Если что не понятно, обращайтесь

Когда я вывожу переменную {$hit}, он мне не пишет array, а выводит текстовую строку формата:

SProducts_0:
  Id: 108
  Name: 'Plantronics CS55 Wireless Earset'
  Url: '108'
  Active: true
  Hit: true
  Hot: null
  Action: null
  BrandId: 18
  CategoryId: 50
  RelatedProducts: ''
  Mainimage: 108_main.jpg
  Smallimage: 108_small.jpg
  ShortDescription: ''
  FullDescription: '<p>Высоко технологический продукт, который поможет Вам оценить качество на высшем уровне.<br /><br />Все продукты доступны в наличии, а наши менеджеры помогу Вам произвести покупку в кратчайшие сроки.<br /><br />На все продукты мы предоставляем гарантию качества.<br /><br />Приобретайте только в нашем Интернет-магазине по лучшим ценам.</p>'
  MetaTitle: ''
  MetaDescription: ''
  MetaKeywords: ''
  OldPrice: null
  Created: 1307544069
  Updated: 0
  Views: 13
SProducts_1:
  Id: 74
  Name: 'Samsung LN40C650 40" LCD TV'
  Url: '74'
  Active: true
  Hit: true
  Hot: null
  Action: null
  BrandId: 12
  CategoryId: 37
  RelatedProducts: ''
  Mainimage: 74_main.jpg
  Smallimage: 74_small.jpg
  ShortDescription: '<p>Высоко технологический продукт, который поможет Вам оценить качество на высшем уровне.<br /><br />Все продукты доступны в наличии, а наши менеджеры помогу Вам произвести покупку в кратчайшие сроки.<br /><br />На все продукты мы предоставляем гарантию качества.<br /><br />Приобретайте только в нашем Интернет-магазине по лучшим ценам.</p>'
  FullDescription: ''
  MetaTitle: ''
  MetaDescription: ''
  MetaKeywords: ''
  OldPrice: '0.00'
  Created: 1307543711
  Updated: 1301492081
  Views: 2

При попытки сделать foreach, ничего не выводит, ведь это не массив, а строка.

Простое правило программиста будь проще

10

Re: Вывод хитов

сделайте так как в категории:

<ul class="products">
        {$count = 1;}
        {foreach $hit as $p}
            <li class="{counter('', '', 'last')}">
                <div class="image" style="display:table-cell;vertical-align:middle;overflow:hidden;">
                    <a href="{shop_url('product/' . $p->getUrl())}">
                        <img src="{productImageUrl($p->getId() . '_small.jpg')}" border="0"  alt="image" />
                    </a>
                </div>
                <h3 class="name"><a href="{shop_url('product/' . $p->getUrl())}">{echo ShopCore::encode($p->getName())}</a></h3>
                <div class="price priceLight"> 
                    {$p->firstVariant}
                    {if $p->hasDiscounts()}
                        <s>{echo $p->firstVariant->toCurrency('origPrice')} {$CS}</s>
                        <br/>
                        <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
                    {else:}
                        <span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
                    {/if}
                </div>
                <div class="compare"><a href="{shop_url('compare/add/' . $p->getId())}">Сравнить</a></div>
            </li>
            {if $count == 3}<li class="separator"></li> {$count=0}{/if}
            {$count++}
        {/foreach}
        </ul>
Люди меняются, времена меняются, результат остается...

Thumbs up Thumbs down

11

Re: Вывод хитов

ну это так, чтоб понять, теги уже делаете себе какие вам надо.

Люди меняются, времена меняются, результат остается...

Thumbs up Thumbs down

12

Re: Вывод хитов

Удивительно, такой код:

<table width="230" height="auto" border="0" cellpadding="0" cellspacing="0" class="block" align="center">
<tr><td><img src="{$SHOP_THEME}images/block_01.gif" width="230" height="23" alt=""></td></tr>
<tr><td background="{$SHOP_THEME}images/block_02.gif" class="bc">
<h3>Хиты продаж</h3>
{$hit = SProductsQuery::create()->orderByCreated('DESC')->filterByHit(true)->filterByActive(true)->limit(3)->find()}
<ul class="products">
{$count = 1}
{foreach $hit as $p}
<li class="{counter('', '', 'last')}">
<a href="{shop_url('product/'.$p->getUrl())}" class="name">{echo ShopCore::encode($p->getName())}</a>
<a href="{shop_url('product/'.$p->getUrl())}">
<img src="{productImageUrl($p->getId().'_small.jpg')}" border="0" width="150" alt="image" style="clear:both;" /></a>
<div class="price">
{$p->firstVariant}
{if $p->hasDiscounts()}
<s>{echo $p->firstVariant->toCurrency('origPrice')} {$CS}</s>
<br/><span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>
{else:}<span style="font-size:14px;">{echo $p->firstVariant->toCurrency()} {$CS}</span>{/if}  
<a href="{shop_url('compare/add/' . $p->getId())}" class="compare" style="float:right; margin-right:30px;">Сравнить</a>          
</div>
</li>
{if $count == 3}{break}{/if}
{$count++}
{/foreach}
</ul>
</td></tr>
<tr><td><img src="{$SHOP_THEME}images/block_03.gif" width="230" height="24" alt=""></td></tr>
</table>

Работает только на главной, и на всех страницах, у которых $CI->uri->segment(1) != 'shop'
то есть, работает везде, кроме модуля магазина, в модуле магазин, он выводит $hit как строку, а не как массив, поэтому foreach перестаёт работать. Интересно, баг или мудрость...?!

Простое правило программиста будь проще