Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сортировка списка по страницам

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Как сделать отображение огромного списка по страницам?
Stas11
Отправлено: 19 Ноября, 2011 - 20:28:49
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Добрый день.
Подскажите пожалуйста кто знает, как решить проблему с отображением статистики на странице Журнала авторизации пользователей.
Дело в том, что я не чистил журнал несколько лет, а посещаемость сайта очень высокая и за это время скопилось очень много информации об авторизации пользователей.
При попытке открыть эту страницу сбор данных идёт слишком долго (более 5 минут) и за это время происходит таймаут с сервером.
У меня возникла идея, разделить статистику не единым списком, а разделить по страницам как это реализовано при поиске покупателей, просмотре заказов и многом другом разделённым по 20 записей на страницу.
Но вот реализовать это на странице журнала авторизации пользователей я не смог, не силён в программировании на таком уровне.
Единственное что сделал, это вставил в файл reports_customer_log.tpl.html код отображения страниц:

{if $navigator}
<p>{$navigator}
{/if}


Но для того чтобы была сортировка по страницам, этого мало, нужно добавить функцию в файл reports_customer_log.php но вот какой код, я не смог подобрать Огорчение

Попробовал сделать по аналогии с другим файлом custord_new_orders.php где эта функция прописана так:

PHP:
скопировать код в буфер обмена
  1. {
  2.                         _copyDataFromGetToPage( $smarty, $order_statuses );
  3.  
  4.                         $callBackParam = array();
  5.                         _setCallBackParamsToSearchOrders( $callBackParam );
  6.                         $orders = array();
  7.                         $count = 0;
  8.                        
  9.                         $navigatorHtml = GetNavigatorHtml( _getUrlToNavigate(),20,
  10.                                 'ordGetOrders', $callBackParam, $orders, $offset, $count );
  11.  
  12.                         foreach($orders as $key=>$order)
  13.                                 {
  14.                                 $orders[$key]['isCustomerInBl'] = isCustomerInBl($order['customerID']);
  15.                                 }
  16.  
  17.                         $smarty->hassign( "orders", $orders );
  18.                         $smarty->assign( "navigator", $navigatorHtml );
  19.                 }

Где цифра 20 отвечает за количество отображаемых записей на странице, но дело то в том, что этот код с этими параметрами служит для запроса в таблицу с заказами и отображает список заказов, а мне надо журнал авторизации пользователей. Пробовал удалять лишние строки, менять вплоть до того, что оставлял оду строчку:

$navigatorHtml = GetNavigatorHtml( _getUrlToNavigate(), 20 );
но страница выдаёт ошибку Огорчение

Помогите пожалуйста написать правильный код чтобы статистика журнала отображалась не единым списком, а по странично.
Я хочу сделать отображение не по 20 записей, а например по 500 на страницу, так как сейчас у меня 100000 записей единым списком не хочет выводить, сервер не справляется.

Вот код файлов в которые я хочу добавить отображение по страницам:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. /*****************************************************************************
  3.  *                                                                           *
  4.  * Shop-Script PRO                                                           *
  5.  * Copyright (c) 2005 WebAsyst LLC. All rights reserved.                     *
  6.  *                                                                           *
  7.  *****************************************************************************/
  8. ?><?PHP
  9.         if (!strcmp($sub, "customer_log"))
  10.         {
  11.                 if ( isset($_POST["clear"]) )
  12.                 {
  13.                         if (CONF_BACKEND_SAFEMODE) //this action is forbidden when SAFE MODE is ON
  14.                         {
  15.                                 Redirect( "admin.php?dpt=reports&sub=customer_log&safemode=yes" );
  16.                         }
  17.                         stClearCustomerLogReport();
  18.                 }
  19.  
  20.                 $customer_log_report = stGetCustomerLogReport();
  21.  
  22.                 $smarty->assign("customer_log_report", $customer_log_report );
  23.  
  24.                 //set sub-department template
  25.                 $smarty->assign("admin_sub_dpt", "reports_customer_log.tpl.html");
  26.         }
  27. ?>


А это код html файла

CODE (html):
скопировать код в буфер обмена
  1. {* reports: customer log *}
  2.  
  3. <p><b>{$smarty.const.ADMIN_CUSTOMER_LOG}</b></p>
  4.  
  5. <form action="admin.php?dpt=reports&sub=customer_log" method=post>
  6.  
  7. <table>
  8.  
  9.  
  10. {if $customer_log_report}
  11.  
  12.         <tr>
  13.                 <td>
  14.  
  15. <table cellspacing=0 cellpadding=5>
  16. <tr class="mainmenu_selected_{$current_dpt}">
  17.         <td>
  18.                 <b>
  19.                         {$smarty.const.ADMIN_CUSTOMER_LOGIN}
  20.                 </b>
  21.         </td>
  22.         <td>
  23.                 <b>
  24.                         IP             
  25.                 </b>
  26.         </td>
  27.         <td>
  28.                 <b>
  29.                         {$smarty.const.ADMIN_CUSTOMER_ENTER_TIME}
  30.                 </b>
  31.         </td>
  32. </tr>
  33.  
  34.  
  35. {section name=i loop=$customer_log_report}
  36. <tr class="{cycle values="bg_white, bg_$current_dpt"}">
  37.         <td>
  38.                 {$customer_log_report[i].login}
  39.         </td>
  40.         <td>
  41.                 {$customer_log_report[i].customer_ip}
  42.         </td>
  43.         <td>
  44.                 {$customer_log_report[i].customer_logtime}
  45.         </td>
  46. </tr>
  47. {/section}
  48.  
  49. </table>
  50.  
  51.                 </td>
  52.         </tr>
  53.  
  54.         <tr>
  55.                 <td>                    <input type=submit value='{$smarty.const.ADMIN_REPORT_CLEAR}' name='clear'>
  56.                 </td>
  57.         </tr>
  58.  
  59. {else}
  60.         {$smarty.const.STRING_EMPTY_LIST}
  61. {/if}
  62.  
  63. </table>
  64.  
  65. </form>


Заранее премного благодарен за помощь и подсказку.

(Отредактировано автором: 19 Ноября, 2011 - 20:38:42)

 
 Top
emslt
Отправлено: 20 Ноября, 2011 - 14:47:31
Post Id



Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Во первых меня убило вот это :
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. /*****************************************************************************
  4.  *                                                                           *
  5.  * Shop-Script PRO                                                           *
  6.  * Copyright (c) 2005 WebAsyst LLC. All rights reserved.                     *
  7.  *                                                                           *
  8.  *****************************************************************************/
  9. ?><?PHP
  10.  


Это что за анекдот? Улыбка
<?php ?> <?php зачем так.

Я считаю что журнал посещения пользователей самим пользователям вообще не нужен.
Да и в принципе как и Вам самому.
Если хочется его просто прочесть то надо ставить лимит на вывод количества информации.
SELECT username FROM user_log LIMIT 500 например.
Я пользуюсь программой heidisql - очень удобно просматривать данные.

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

SELECT username FROM user_log LIMIT 500 OFFSET 1
SELECT username FROM user_log LIMIT 500 OFFSET 500
SELECT username FROM user_log LIMIT 500 OFFSET 1000
OFFSET говорит о том с какой записи выводить информацию.

Если хотите что бы сайт нормально работал кончайте пользоваться smarty, он придуман для того что бы быстрее делать деньги на заказчиках сайтов, а не ускорять работу сайта. И пусть меня закидают программисты местные яйцами и помидорами - но это правда.
 
 Top
sKaa
Отправлено: 20 Ноября, 2011 - 18:18:38
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


emslt пишет:
кончайте пользоваться smarty

У меня свой шаблонизатор если задуматься то по типо смарти, только без все этих псевдо фишек и наворотов. Он умеет самое необходимое : искать в кэше шаблон, если есть то выводить его, если нет то скреплять любое кол-во мелких шаблонов (header, body, footer) в один, сохранять его в кэш и выводить
 
 Top
Stas11
Отправлено: 20 Ноября, 2011 - 23:48:34
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




emslt пишет:
Я считаю что журнал посещения пользователей самим пользователям вообще не нужен.
Да и в принципе как и Вам самому.

Пользователям скорее всего да, он не нужен, а вот мне он очень даже нужен.
Во первых в журнале записываются все данные о входе, дата входв, время и ip адрес с которого был вход.
Например есть пользователь который оформляет заказы и не оплачивает их, я смотрю историю его входов и сравниваю какой у него IP, если статический, то баню, если динамика, то заношу в чёрный список, или например мне надо удалить пользователя, но прежде чем удалить, мне нужно знать, наложил ли он в свою корзины товары или нет, а для этого я смотрю дату последнего посещения, если больше 7 дней, значит корзина пуста (автоматически корзины очищаются через 7 дней). Ну и для многих других целей мне этот журнал нужен, к тому же там есть кнопка очистки журнала, но вот чтобы его очистить, нужно его открыть, а поскольку он отображается одной страницей с огромной полосой прокрутки, то открыть его спустя 2 года записей уже не получается.

Что касается смарти, то переходить на что то другое уже поздно, магазин работает 5 лет и основательно отлажен и автоматизирован для продаж. А то что смарти не есть гут, я уже слышал не однократно, но вот поделать что либо уже не могу к сожалению.
Насчёт коментария в виде <?PHP> это да, самого убивает, но переделываю по мере редактирования файлов, так как такие коменты во всех файлах шоп скрипта Улыбка

Насчёт SELECT username FROM user_log LIMIT 500 OFFSET напишите пожалуйста поконкретнее, так как я в программировании как ученик второго класса.
И кстати, насколько я понял, это запрос в базу на выборку списка из журнала, но вся прелесть в том, что у меня уже есть отображение всех необходимых данных из таблицы, мне нужно только разделить эти данные по страницам.
Например имеем список из 1000 записей на одной странице, а нужно сделать отображение по 100 записей на 10 страницах или по 500 на 2 страницах.
На всех страницах где есть вывод по страницам, есть такой код:

{if $navigator}
<p>{$navigator}
{/if}

Именно он выводит на странице 1 2 3 4 5 6 ... 285 след >> | показать все

а вот как заставить работать отображение по страницам список, на котором есть список, но нет постраничного отображения, я не знаю Недовольство, огорчение
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB