Заигравка с CodeIgniter за пореден път - странициране пробле

C++ JAVA
Post Reply
User avatar
Ticketa
Турист
Турист
Posts: 554
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 24
Location: in /root
Contact:

Заигравка с CodeIgniter за пореден път - странициране пробле

Post by Ticketa » Sun Mar 31, 2013 3:49 pm

Имам проблем с извеждането на резултатите, когато имам странициране в сайта.

Проблема е следния. Имаме 6 резултата в базата от данни, искаме да изведем на всяка страница по 5 резултата. Тогава ще имаме: 2 страници

На първата страница, трябва да имаме 5 резултата, на втората един. При мен се получава съвсем друго нещо, така и не мога да разбера от мен ли е проблема подяволите? Изрових гугъл хиляди пъти и четох, без резултат. При качвам файловете с надеждата , някой да удари едно рамо и да ги конфигурира правило или най-добре, да ми кажеш къде съм сгрешил и КАК да оправя проблема и да си знам за напред.


свали

Ето и примерната таблица:

[sql]CREATE TABLE `entry` (
`entry_id` int(11) NOT NULL AUTO_INCREMENT,
`entry_name` varchar(255) NOT NULL,
`entry_body` text NOT NULL,
`entry_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`entry_id`)
) ;[/sql]

User avatar
Ticketa
Турист
Турист
Posts: 554
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 24
Location: in /root
Contact:

Re: Заигравка с CodeIgniter за пореден път - странициране пр

Post by Ticketa » Mon Apr 01, 2013 8:52 am

ъп..

User avatar
bafitu
Много Редовен
Много Редовен
Posts: 1509
Joined: Mon Dec 12, 2005 9:12 am
Answers: 102
Location: Somewhere around nothing..

Post by bafitu » Tue Apr 02, 2013 8:15 pm

понеже си задал опцията 'use_page_numbers' , променливата $offset на 12 ред е грешен.

$this->uri->segment(2) съдържа номера на текущата страница т.е.
ако сме на 2ра страница $this->uri->segment(2) ще е = 2

и заявката която се изпълнява за 2рата страница е :
SELECT * FROM `entry` ORDER BY `entry_id` LIMIT 2, 5;

това Е грешно.

за да върне правилно резултатите за 2рата страница заявката ти трябва да изглежда така:
SELECT * FROM `entry` ORDER BY `entry_id` LIMIT 5, 5;

това означава - извади данните от entry като почнеш от 5ти ред и селектираш 5 реда след това. ( за първата страница е LIMIT 0,5 )

за да стане това трябва да се промени 12ти ред в контролера
$offset = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;
трябва да стане
$offset = ($this->uri->segment(2)) ? ($this->uri->segment(2)-1)*5 : 0;

т.е. offset-а се изчисля : текущата страница - 1 умножено по брои редове на страница:
т.е. ако сме на 2ра страница това ще изглежда така : (2-1)*5 -> 5 - трета : (3-1)*5 -> 10

Ако $config['use_page_numbers'] ти е false скрипта би трябвало да ти работи както е в момента с тази разлика ,че в url-a ще виждаш на 2рата страница цифрата 5 вместо 2

User avatar
Ticketa
Турист
Турист
Posts: 554
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 24
Location: in /root
Contact:

Post by Ticketa » Wed Apr 03, 2013 8:26 am

Супер - работи и те разбрах, аз използвах use_page_numbers , за да "преобразява" числата. Хич не се сетих за примера при offset. Иначе, зная к'во правя т.е. за какво го ползвам.

Впрочем забелязах един "бъг". Когато съм на втора страници и долу ми излиза страницирането:

< 1 2

Като натисна на "1" ме прехвърля в: /page/ и съответно ми вади грешка, че страницата не съществува. Ако натисна на "<" няма проблеми пращаме в /page/1/ и страницата си съществува.

offset-а съм го сложил под uri_sigmenta в момента и съм го написал по следния начин:


$offset = ($this->uri->segment(2)) ? ($this->uri->segment(2)-1)*$config['per_page'] : 1;

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

ЕДИТ: Оправих се, след като добавих: $config['first_url'] = '1';

+1 за това, че ми обясни нещата и си разбрах грешката.

Post Reply