Искать  
 
   
1 из 2
1
Подводные камни exp:query и paginate
Отправлено: 12 Октябрь 2010 10:18 A.M.   [ Игнорировать ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05

Подскажите в чем может быть проблема если использую {exp:query} без {paginate}, то все работает.
Как только добавляю {paginate}, типа такого

{exp:query}
  {paginate}
    {pagination_links}
  {/paginate}
{/exp:query}

то, получаю ответ: Поиск не дал результата.

Профиль
 
 
Отправлено: 12 Октябрь 2010 10:52 A.M.   [ Игнорировать ]   [ # 1 ]
Sr. Member
RankRankRankRank
Всего сообщений:  987
Зарегистрирован  2008-09-27

Покажите полный код шаблоны. query не обернут его в какой-нибудь тэг?

Профиль
 
 
Отправлено: 12 Октябрь 2010 11:03 A.M.   [ Игнорировать ]   [ # 2 ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05
<?php
                            
if (!count($_POST)) { }
                            
else
                            
{
                            $sql_query 
"SELECT * FROM exp_weblog_data WHERE entry_id IN (SELECT entry_id FROM exp_category_posts WHERE cat_id = 
                               '{embed:category}')"
.$regional_q .$minprice_query .$maxprice_query .$rooms;
                         
?>
                         
                         
<table width="100%" cellpadding="10" cellspacing="0">
                            <
tr>
                                 <
td colspan="4">
                                    <
a href="">Главная</a>
                                    <
span style="font-weight: bold; color:#0a4c9e;"» 
                                       {embed
:cat_titles}
                                    
</span><br /><br />
                                    <
a href="{embed:cat_titles}">Отменить фильтр</a>
                                 </
td>
                               
{exp:query sql="<? echo($sql_query); ?>"}
                               {if no_results} 
<td>Поиск не дал результата</td>{/if}
                               {embed
="elements/.1_objectstest"
                                  
category="{embed:category}"
                                  
cat_name ="{embed:cat_titles}"
                                  
cat_url "{embed:cat_url}"
                                  
title_ru="{field_id_68}"
                                  
entry_id="{entry_id}" 
                                  
title="{exp:title:entry entry_id="{entry_id}"}" 
                                  
titlus="{exp:title:entry entry_id="{entry_id}"}" 
                                  
region="{field_id_44}"
                                  
nas_punkt="{field_id_45}"
                                  
nas_punkt_short="{field_id_46}"
                                  
ob_plosht="{field_id_57}"
                                  
zeml_plosht="{field_id_70}"
                                  
ob_rooms="{field_id_62}"
                                  
ob_beds="{field_id_63}"
                                  
ob_price="{field_id_56}"
                                  
sqm_price="{field_id_64}"
                                  
compl_minprice="{field_id_58}"
                                  
compl_maxprice="{field_id_59}"
                               
}
                               {switch
="|||</tr><tr>"}
                                      
-тут {paginate}
                               {
/exp:query}
                               {if total_results 
4 }<td></td>
                               
{if:elseif total_results 3}<td></td>
                               
{if:elseif total_results 2 }<td></td>{/if}
                            
</tr>
                         </
table>
                         
<?php } ?> 
Профиль
 
 
Отправлено: 12 Октябрь 2010 11:10 A.M.   [ Игнорировать ]   [ # 3 ]
Sr. Member
RankRankRankRank
Всего сообщений:  987
Зарегистрирован  2008-09-27

{paginate} не закрыт

{if total_results 4 }<td></td>
                               
{if:elseif total_results 3}<td></td>
                               
{if:elseif total_results 2 }<td></td>{/if}
                            
</tr

Не понятно, что он делает за пределами всех тэгов.

И мне кажется логика как-то не так построена. Тут половину команд нужно выполнять при включеном php на выходе и половину с php на входе

Профиль
 
 
Отправлено: 12 Октябрь 2010 11:16 A.M.   [ Игнорировать ]   [ # 4 ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05

{paginate} закрыт
я просто показал где блок его нах-ся: а код такой:

{paginate}
  
</tr>
  <
tr>
     <
td colspan="4" style="text-align: center;">
        
Страница {current_page} из {total_pages} имеющихся.<br>
        
{if previous_page}<a href="{auto_path}">Предыдущая страница</a>&nbsp;{/if}{pagination_links}
        {if next_page}
<a href="{auto_path}">&nbsp;Следующая&nbsp;страница</a>{/if}
     
</td>
  </
tr>
  <
tr>
{/paginate} 

Меняем query на weblog и опля, paginate работает

Профиль
 
 
Отправлено: 12 Октябрь 2010 11:20 A.M.   [ Игнорировать ]   [ # 5 ]
Sr. Member
RankRankRankRank
Всего сообщений:  987
Зарегистрирован  2008-09-27

Попробуй убрать весь php код и внутри  {exp:query sql=”<? echo($sql_query); ?>”} Допиши просто запрос какой-нибудь. Првоерь будет ли работать

Профиль
 
 
Отправлено: 12 Октябрь 2010 11:21 A.M.   [ Игнорировать ]   [ # 6 ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05

Да это лишний блок =) Остался от предыдущих мыслей )...нужно убрать

Профиль
 
 
Отправлено: 12 Октябрь 2010 11:27 A.M.   [ Игнорировать ]   [ # 7 ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05
Максим - 12 Октябрь 2010 11:20 A.M.

Попробуй убрать весь php код и внутри  {exp:query sql=”<? echo($sql_query); ?>”} Допиши просто запрос какой-нибудь. Првоерь будет ли работать

Убрал весь пхп:

<table width="100%" cellpadding="10" cellspacing="0">
                            <
tr>
                                 <
td colspan="4">
                                    <
a href="">Главная</a>
                                    <
span style="font-weight: bold; color:#0a4c9e;"» 
                                      {embed
:cat_titles}
                                    
</span><br /><br />
                                    <
a href="{embed:cat_titles}">Отменить фильтр</a>
                                 </
td>
                               
{exp:query sql="SELECT * FROM exp_weblog_data WHERE entry_id IN (SELECT entry_id FROM exp_category_posts WHERE cat_id = '46')"}
                               {if no_results} 
<td>Поиск не дал результата</td>{/if}
                               {embed
="elements/.1_objectstest"
                                  
category="{embed:category}"
                                  
cat_name ="{embed:cat_titles}"
                                  
cat_url "{embed:cat_url}"
                                  
title_ru="{field_id_68}"
                                  
entry_id="{entry_id}" 
                                  
title="{exp:title:entry entry_id="{entry_id}"}" 
                                  
titlus="{exp:title:entry entry_id="{entry_id}"}" 
                                  
region="{field_id_44}"
                                  
nas_punkt="{field_id_45}"
                                  
nas_punkt_short="{field_id_46}"
                                  
ob_plosht="{field_id_57}"
                                  
zeml_plosht="{field_id_70}"
                                  
ob_rooms="{field_id_62}"
                                  
ob_beds="{field_id_63}"
                                  
ob_price="{field_id_56}"
                                  
sqm_price="{field_id_64}"
                                  
compl_minprice="{field_id_58}"
                                  
compl_maxprice="{field_id_59}"
                               
}
                               {switch
="|||</tr><tr>"}
                               {paginate}
                                 
</tr>
                                 <
tr>
                                    <
td colspan="4" style="text-align: center;">
                                       
Страница {current_page} из {total_pages} имеющихся.<br>
                                       
{if previous_page}<a href="{auto_path}">Предыдущая страница</a>&nbsp;{/if}{pagination_links}
                                       {if next_page}
<a href="{auto_path}">&nbsp;Следующая&nbsp;страница</a>{/if}
                                    
</td>
                                 </
tr>
                                 <
tr>
                               
{/paginate}  
                            {
/exp:query}
                         
</tr>
                      </
table

Если убрать paginate, query - работает
Если query заменить на weblog, paginate - работает

Профиль
 
 
Отправлено: 12 Октябрь 2010 02:58 P.M.   [ Игнорировать ]   [ # 8 ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05

Ни у кого нет мыслей по данному вопросу?
Приму любые предположения.

Профиль
 
 
Отправлено: 12 Октябрь 2010 11:14 P.M.   [ Игнорировать ]   [ # 9 ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05

В более простом запросе paginate работает
{exp:query paginate=“both” limit=“12” sql=“SELECT * FROM exp_weblog_data”}{/exp:query}

Тогда проблема 100% в запросе, кто разбирается, помогите понять.
Я так понимаю ЕЕ изменяет запрос, разбирая его по частям, добавляя как я понял диапазон выборки, и не понимает мой двойной запрос,
потомучто добавляет свой код в оба запроса (

Оочень давно не работал с mysql и чистым сиквелом, все больше mssql, а там намного проще да и таких ограничений не было.
Подскажите вариант запроса, который бы был правильно изменен ЕЕ.

Профиль
 
 
Отправлено: 12 Октябрь 2010 11:17 P.M.   [ Игнорировать ]   [ # 10 ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05

Хотя думаю можно через 2 отдельных запроса сделать, первый который выберет все entry_id и запишет их в массив,
и подставить этот масив во второй запрос, но думаю что тоже будет выглядеть не хорошо =(

Профиль
 
 
Отправлено: 14 Октябрь 2010 11:46 A.M.   [ Игнорировать ]   [ # 11 ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05
divined - 12 Октябрь 2010 11:17 P.M.

Хотя думаю можно через 2 отдельных запроса сделать, первый который выберет все entry_id и запишет их в массив,
и подставить этот масив во второй запрос, но думаю что тоже будет выглядеть не хорошо =(

Так не получится (
Для этого способа нужно парсить php на входе, а остальная часть требует парсинга на выходе.
Вопрос сводится к тому, как сделать из этого запроса: SELECT * FROM exp_weblog_data WHERE entry_id IN (SELECT entry_id FROM exp_category_posts WHERE cat_id = ‘46’)

запрос подходящий для paginate

Профиль
 
 
Отправлено: 18 Октябрь 2010 01:48 P.M.   [ Игнорировать ]   [ # 12 ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05

переписал запрос:
SELECT * FROM exp_weblog_data INNER JOIN exp_category_posts ON exp_category_posts.entry_id = exp_weblog_data.entry_id where cat_id=46

Первая страница paginate выводится, при переходе на другие - чистый лист.
У меня query возвращает результат ПОСТ запроса.
А переход по страницам paginate есть запрос ГЕТ.
Есть что-нибудь чтобы решить разногласия?

Профиль
 
 
Отправлено: 18 Октябрь 2010 01:49 P.M.   [ Игнорировать ]   [ # 13 ]
Sr. Member
RankRankRankRank
Всего сообщений:  987
Зарегистрирован  2008-09-27

Я обычно в сессию пишу post запрос на первой странице и потом уже поставляю в sql запрос

Профиль
 
 
Отправлено: 19 Октябрь 2010 09:24 A.M.   [ Игнорировать ]   [ # 14 ]
Новичок
Rank
Всего сообщений:  61
Зарегистрирован  2010-10-05

Можно пример?

Профиль
 
 
Отправлено: 19 Октябрь 2010 11:03 A.M.   [ Игнорировать ]   [ # 15 ]
Sr. Member
RankRankRankRank
Всего сообщений:  987
Зарегистрирован  2008-09-27

Вначале шаблона php на входе

if(isset($_POST['includes']) && $_POST['includes'!= "")
      
$_SESSION['includes'$REGX->xss_clean($_POST['includes']); 

Затем создаю запрос и по результатам запроса составляю строку из id записей, чтобы потом только их и отображать

$sql "
   SELECT wd.entry_id
   FROM exp_weblog_data AS wd
   LEFT JOIN exp_category_posts AS cp ON cp.entry_id = wd.entry_id
   LEFT JOIN exp_categories AS ct ON ct.cat_id = cp.cat_id
   WHERE
   ct.cat_url_title LIKE '"
.$_SESSION['type']."%".$_SESSION['metal']."%".$_SESSION['includes']."'
   "
.$sql_price."
   GROUP BY wd.entry_id
   "
;

   
//echo $sql;

   
$query $DB->query($sql);


   
$ids "";
   if (
$query->num_rows 0)
   
{
       
foreach($query->result as $row)
       
{
           $ids
.= $row['entry_id']."|";
       
}
   }
   
else
       
$ids "1";
   if(
$ids != "1")
   
{
       $ids 
substr($ids,0,strlen($ids)-1);
   
}

   
if(isset($_POST['type']) || isset($_POST['price']))
   
{
       $_SESSION[
'search_ids'$ids;
   

Затем вывоже уже сами записи:

{exp:weblog:entries weblog="catalog" entry_id="<?php echo $_SESSION['search_ids']; ?>" limit="9" paginate="both" disable="member_data|trackbacks|categories|category_fields"
Профиль
 
 
   
1 из 2
1