Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывод контента по частям, ума не приложу... 
:(
    Опции темы
shootnix
Дата 23.2.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

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



Здравствуйте. Извините за, кажись, простой вопрос, но что-то я никак не соображу, что к чему.

Итак: есть скрипт, он вытягивает из базы определённую информацию - картинка+описание чего-то там.. Суть вот в чём: нужно, чтобы скрипт выдавал по 10 таких вот частей, а на остальное давал ссылку - 2,3 ну то есть, разделял на части сам и создавал линки. Ну вот как на этом даже вот форуме - делится же здесь на страницы инфа. Только нужно, чтобы это делал сам скрипт динамически.

Количество записей известно в начале. Количество выводимых записей - 10.

Плиз, помогите, нужно как можно быстрее. Кто чем - можно просто алгоритм, можно код smile)

Наверняка же есть уже какие-то стандарты в этих алгоритмах, гостевухи, к примеру, имеют такие фишки.

Это сообщение отредактировал(а) shootnix - 23.2.2006, 16:11
PM WWW ICQ   Вверх
korob2001
Дата 24.2.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



smile Алгоритм такой:
1. Узнаём кол-во записей в БД.
2. Если нам нужно выводить по 10 сообщений на страницу, значит делим на 10, в итоге узнаём сколько ссылок нужно генерировать.
3. Узнаём остаток от деления общего кол-ва сообщений, на кол-во сообщений на страницу, т.е. 10. Если остаток есть значит добавляем ещё одну страницу, к кол-ву страниц.
4. Если сообщений больще чем, кол-во на страницу, генерируем ссылки myscript.pl?page=$count .

Вобще-то это сложно объяснить словами, но здесь я уже приводил пример разбивки на страницы, гостевой книги. Правда там вся инфа хранилась в текстовом файле, с базой же всё гораздо проще. Вот эта тема:
http://forum.vingrad.ru/index.php?showtopic=65789

Это сообщение отредактировал(а) korob2001 - 24.2.2006, 09:01


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
shootnix
Дата 24.2.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

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



Спасибки. Буду разгебать smile
PM WWW ICQ   Вверх
korob2001
Дата 24.2.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Если не разберёшься, то пиши. Напишу пример разбивки на страницы с использованием БД. Просто сейчас времени в обрез.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
igorold
Дата 27.2.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



Держи мой пример:

Код

    my $page = GetCGI("page");
    if ($page==0) {
        $page=1;
    }
    my $step=10;
    my $GetMax = RunQuery($dbh, "SELECT count(*) FROM Guestbook WHERE Podgr='1' and Flag<>'1'");
    my $Max_Gr = $GetMax->fetchrow_array();
    $GetMax->finish();
    my $Max_Page = int($Max_Gr/$step);
    if ($Max_Page*$step < $Max_Gr) {$Max_Page++};
    my $Gr1 = $step*($page-1);

    $Result = RunQuery($dbh, "SELECT Gruppa FROM Guestbook WHERE Podgr='1' ORDER BY Gruppa desc limit $Gr1, $step");
    my $Gr2=0;
    while (my @ReturnedData = $Result->fetchrow_array()) {
        if ($Gr2==0) { $Gr2=$ReturnedData[0]; }
        else         { $Gr1=$ReturnedData[0]; }
    }
    $Result->finish();
    my $Query = "SELECT G.Gruppa, G.Podgr, Description, CONCAT(U.Surname, ' ', U.Name) AS ini, DATE_FORMAT(MakeDate, '%d.%m.%Y - %T') as Data ";
    $Query = $Query . "FROM Guestbook G LEFT JOIN Users U ON G.UserID=U.i ";
    $Query = $Query . "WHERE G.Gruppa>='$Gr1' and G.Gruppa<='$Gr2' and Flag<>'1' ORDER BY G.Gruppa desc, G.Podgr";
    my $Content=GetArrayOfHashes($dbh, $Query);
    my %Params =
    (
        page            => $page,
        Max_Page        => $Max_Page,
        UserRights      => $UserRights,
        ApachePath      => $ApachePath,
        Table           => $Content
    );
    my $Result='';
    $template->process('gb.tmpl', \%Params, $Result);
    print $Result;

это скриптовая часть,

а вот что в файле gb.tmpl :
Код

<table border=0 cellpadding=0 cellspacing=0 width=100%>
    <tr><td><div align=center>
    [% Nom=0 %]
    [% WHILE Nom<Max_Page %]
        [% Nom=Nom+1 %]
        [% IF Nom == page %]
          &nbsp;[% Nom %]&nbsp;
        [% ELSE %]
          <A href="[% ApachePath %]/support.pl?MainModule=Guest&page=[% Nom %]&Level=0">&nbsp;[% Nom %]&nbsp;</A>
        [% END %]
    [% END %]
    </tr>
</table>

Добавлено @ 16:23
У меня встречный вопрос к спецам: номера отображаемых групп в моем примере я вычисляю так:
Код

    $Result = RunQuery($dbh, "SELECT Gruppa FROM Guestbook WHERE Podgr='1' ORDER BY Gruppa desc limit $Gr1, $step");
    my $Gr2=0;
    while (my @ReturnedData = $Result->fetchrow_array()) {
        if ($Gr2==0) { $Gr2=$ReturnedData[0]; }
        else         { $Gr1=$ReturnedData[0]; }
    }
    $Result->finish();

а нельзя как-то попроще, чтобы эти данные выдавались в массив и потом без всяких циклов обращаться к элементам [0] и [-1]
(т.е. к первому элементу массива и к последнему)

Это сообщение отредактировал(а) igorold - 27.2.2006, 16:19


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
korob2001
Дата 24.8.2006, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



igorold - ивиняюсь, я просто сразу не заметил твоего вопроса, в конце последнего поста. Потому если ты ещё не решил проблему, давай к нему вернёмся.

Это сообщение отредактировал(а) korob2001 - 24.8.2006, 21:08


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




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


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

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