Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Smarty проблема вывода данных из БД в массив, Как вывести результаты "поиска" 
:(
    Опции темы
Косинус
Дата 19.3.2010, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.3.2010

Репутация: нет
Всего: нет



Тут такое дело, проблема с выводом из БД, результата поиска… две составляющих товара, цена и артикль не желают этого делать…
Не как, не могу понять почему не выводится. Всё тоже самое работает в файлах products.tpl и product.tpl, а в файле шаблона поиска search.tpl не хочет. smile 

При поиске выводится только имя товара и описание, хотел прикрутить ещё цену, артикаль но не получилось, помогите, объясните что я делаю не так?
Вот код шаблона search.tpl:

Код

{*
  Template name: Поиск
  Результаты поиска
  Used by: Search.class.php   
  Assigned vars: $products, $keyword
*}

<!-- Заголовок  /-->
<div id="page_title">      
    <h1 class="float_left">Поиск {$keyword|escape}</h1>

    <!-- Хлебные крошки /-->
    <div id="path">
      <a href="./">Главная</a>
      > Поиск {$keyword|escape}
    </div>
    <!-- Хлебные крошки #End /-->
</div>  

{if $properties}
<div id="filter_params">
<table>
  {foreach name=properties item=property from=$properties}
  {assign var=property_id value=$property->property_id}
  <tr>
  <td>{$property->name}:</td>
  <td>
    {if $smarty.get.$property_id}<a href='catalog/{$category->url}{$property->clear_url}'>все</a>{else}все{/if}
    {foreach name=options from=$property->options item=option}
      {if $smarty.get.$property_id == $option->value}
      <span>{$option->value}</span>
      {else}
      <span><a href='catalog/{$category->url}{if $brand}/{$brand->url}{/if}{$option->url}'>{$option->value}</a></span>
      {/if}      
    {/foreach}
    </td>
  </tr>
  {/foreach}
  </table>
</div>
{/if}
{if $properties}
<div id="filter_params">
<table>
  {foreach name=properties item=property from=$properties}
  {assign var=property_id value=$property->property_id}
  <tr>
  <td>{$property->name}:</td>
  <td>
    {if $smarty.get.$property_id}<a href='catalog/{$category->url}{$property->clear_url}'>все</a>{else}все{/if}
    {foreach name=options from=$property->options item=option}
      {if $smarty.get.$property_id == $option->value}
      <span>{$option->value}</span>
      {else}
      <span><a href='catalog/{$category->url}{if $brand}/{$brand->url}{/if}{$option->url}'>{$option->value}</a></span>
      {/if}      
    {/foreach}
    </td>
  </tr>
  {/foreach}
  </table>
</div>
{/if}
{if $products}
<!-- Список товаров  /-->
<!-- Фильтр по свойствам  #End /-->
<div class="cat_table">
<table cellpadding="0" cellspacing="0" width="100%">
<thead>
<tr style="background-color: #acbed2;">
<th align="left">OEM</th>
<th align="left"><nobr>Наименование товара</nobr></th>
<th align="left" width="200">Описание</th>
<th>Цена</th>
<th>Ед.</th>
<th>Наличие</th>
<th><nobr>В корзину</nobr></th>
</tr>
</thead>
<tbody>
  
    {foreach name=products item=product from=$products}    
    <!-- Товар /-->
    {if $smarty.foreach.products.iteration is not even}
    <tr class="ct_color1"> {else} <tr class="ct_color2"> {/if}
      
           <!-- OEM артикль /-->
            <td><nobr>{$product->variants[0]->sku}</nobr></td> 
           <!-- #End артикль /-->
    
            <!-- Название /-->
      <td tooltip='product' product_id='{$product->product_id}'><nobr><a href="products/{$product->url}" {if $product->hit}class="product_name_link_hit"{else}class="product_name_link"{/if}>{$product->model|escape}</a></nobr></td>
            <!-- Название #End /-->

                        <!-- Описание товара /-->
            <td class="product_annotation">
                {$product->description}
            </td>
            <!-- Описание товара #End /-->
            
  <!-- Цена /-->
  {if $product->variants[0]->discount_price>0}
  <td><nobr><span id=variant_price_{$product->product_id}>{$product->variants[0]->discount_price*$currency->rate_from/$currency->rate_to|string_format:"%.2f"}</span>&nbsp;{$currency->sign|escape}</nobr></td>
    {else}
    <td>---</td>
  {/if}

  <!-- Цена #End /-->
  
 <td>шт</td>  
 {if $product->variants[0]->discount_price>0}
    <td>Есть</td>
    {else}
    <td><a href="/sections/contacts">Заказать</a></td>
    {/if}

<td><form action=cart method=get>
  {if $product->variants|@count > 1}
  <!-- Варианты товара /-->
  <select name=variant_id onchange="display_variant({$product->product_id}, this.value);return false;">
  {foreach from=$product->variants item=variant}
  <option value='{$variant->variant_id|escape}'>{$variant->name|escape}<strong></strong><br>
  {/foreach}
  </select>
  <input type=button  value='' class="link_to_cart" onclick="document.cookie='from='+location.href+';path=/';this.form.submit();">
    <br>
  {elseif $product->variants|@count == 1}
  <input type=hidden name=variant_id value='{$product->variants[0]->variant_id}'>
  <input type=button value='' class="link_to_cart" onclick="document.cookie='from='+location.href+';path=/';this.form.submit();">
  {/if}
  </form></td>
        <!-- Информация о товаре #End /-->
        
    <!-- Товар #End /-->

    

    
</tr>
        {if $smarty.foreach.products.iteration%2 == 0}

    {/if}
    {/foreach}
   

<!-- Список товаров #End /-->


</tbody>
    </table></div>
{else}
<tr><h1>Товары не найдены</h1></tr>
{/if}
<script>
var variants_prices = new Array;
{foreach from=$products item=product}
variants_prices[{$product->product_id|escape}] = new Array;
{foreach from=$product->variants item=variant}
  variants_prices[{$product->product_id|escape}][{$variant->variant_id|escape}] = '{$variant->discount_price*$currency->rate_from/$currency->rate_to|string_format:"%.2f"}';
{/foreach}
{/foreach}

  {literal}
  function display_variant(product, variant)
  {
    document.getElementById('variant_price_'+product).innerHTML = variants_prices[product][variant];
  }
  {/literal}
</script>


Вот так выглядят таблицы БД, это товара:
user posted image

Это – цена (price), артикль (sku)… и так по мелочи…
user posted image

Немного поясню как дело происходит – в массив variants_prices должна заносится цена, а уже от этого все расчёты и пляшут, но проблема, что именно в файле search.tpl, массив почему-то остается пустым, в других файлах всё отлично работает…

Плиз… помогите, а то я тупа не могу понять, в чем дело  smile 

P.s. Сайт на движке Smarty v.2.6.25 
Версия сервера: 5.0.87-percona-highperf-log
Версия MySQL-клиента: 5.0.67


Это сообщение отредактировал(а) Косинус - 19.3.2010, 12:36
PM MAIL   Вверх
skyboy
Дата 19.3.2010, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(Косинус @  19.3.2010,  11:20 Найти цитируемый пост)
Немного поясню как дело происходит – в массив variants_prices должна заносится цен

ты неправильно подходишь к вопросу.
вывалил скриншот таблицы в БД и шаблон, с кучей не относящегося к делу кода. только пролистав до конца, понял, что "variant_prices" - это массив в формируемом javascript.
вот и открой исходный код страницы в браузере. и посмотри среди HTML и javascript кода, что находится в блоке, который отвечает за формирование массива variant_prices. исходя из того, что ты увидишь, и надо будет искать причину происходящему дальше.
а то у тебя есть БД, скрипт, вытягивающий из БД данные и передающий данные в шаблон, шаблон с циклами, javascript, формирующий массив,  javascript, использующий этот массив.
вот откуда ты можешь знать, что что "массив остается пустым"? ты смотрел исходный код страницы? или какая-то javascript-функция, берущая данные из массива, не отработала? так, может, проблема вообще в той, второй javascript-функции?
PM MAIL   Вверх
Косинус
Дата 19.3.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.3.2010

Репутация: нет
Всего: нет



Цитата

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

Да я смотрел исходный код, потому я так уверенно и сказал что массив не формируется (извиняюсь, просто я забыл указать, откуда я это узнал), в массив записывается только правильное ИД товара, и всё.

Вот так массив формируется в файлах products.tpl и product.tpl с этим кодом (то что он в некоторых местах пустой, так и должно быть):

Код

<script>
var variants_prices = new Array;
variants_prices[286] = new Array;
variants_prices[287] = new Array;
  variants_prices[287][353] = '4462.56';
variants_prices[288] = new Array;
variants_prices[289] = new Array;
  variants_prices[289][290] = '2506.68';
variants_prices[290] = new Array;
  variants_prices[290][291] = '3750.84';
....
variants_prices[303] = new Array;
  variants_prices[303][304] = '1765.44';
variants_prices[304] = new Array;
  variants_prices[304][305] = '1367.28';
variants_prices[305] = new Array;
  variants_prices[305][306] = '1504.08';

  
  function display_variant(product, variant)
  {
    document.getElementById('variant_price_'+product).innerHTML = variants_prices[product][variant];
  }
  
</script>


А так в файле search.tpl:

Код

<script>
var variants_prices = new Array;
variants_prices[333] = new Array;
variants_prices[332] = new Array;
variants_prices[331] = new Array;
variants_prices[330] = new Array;
......
variants_prices[288] = new Array;
variants_prices[287] = new Array;
variants_prices[286] = new Array;

  
  function display_variant(product, variant)
  {
    document.getElementById('variant_price_'+product).innerHTML = variants_prices[product][variant];
  }
  
</script>


Скрипт работает правильно, в других файлах, кроме того что мне сейчас необходим… потому я и обратился за помощью… два дня уже бьюсь с этим  smile 

Это сообщение отредактировал(а) Косинус - 19.3.2010, 19:38
PM MAIL   Вверх
skyboy
Дата 19.3.2010, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



почему не вставить
Код

{$product->variants|var_dump}
?
что там, пусто? если пусто, почему не посмотреть, как в РНР скрипте формируется этот $products и что записывается в ->variants?
 почему бы самому не выяснить, на каком этапе в твоем коде данных нет, но должны быть?
ведь не сложно, а форумчане в любом случае не сделают это за тебя.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.