Nhầm lẫn phân trang - Phân trang sử dụng bắt đầu, PopulateState sử dụng giới hạn bắt đầu?


7

Tôi hơi bối rối.

Khi tôi nhìn vào liên kết được tạo bởi phân trang ở giao diện người dùng, tôi thấy một tham số truy vấn có tên là start được bao gồm trong các liên kết số trang riêng lẻ và liên kết Bắt đầu và Kết thúc.

Tuy nhiên, phương thức populateStatetrong JModelListlớp cơ sở tìm kiếm limitstartnếu $this->contextcó a non null value.

Do hàm tạo cơ sở cho JModelListcác tập hợp $this->contextbằng với <component_name>.<model_name>nó, nên trong trường hợp mặc định $this->contextsẽ không có giá trị , do đó, popatedState thường sẽ gán giá trị từ $_GET['limitstart']việc sử dụng getUserStateFromRequest()như mã snipped hiển thị:

$value = $app->getUserStateFromRequest($this->context . '.limitstart', 'limitstart', 0);
$limitstart = ($limit != 0 ? (floor($value / $limit) * $limit) : 0);
$this->setState('list.start', $limitstart); 

Tôi sẽ thực sự biết ơn nếu ai đó có thể giải thích lý do tại sao mọi thứ được thực hiện theo cách này và tôi phải làm gì để có được popatedStatephân trang để đồng ý về biến giữ hàng mà trang sẽ bắt đầu.

TIA.


Nếu bạn sử dụng phân trang mặc định bằng cách gọi $pagination = $this->get('Pagination');trong tệp xem thì các vars trạng thái được yêu cầu trong phương thức popatedState của mô hình rất dễ hiểu theo cách này -$limit= $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'), 'uint'); $this->setState('list.limit', $limit); $limitstart = JRequest::getUInt('limitstart', 0); $this->setState('list.start', $limitstart);
dev-m

Vì vậy, như tôi đã trả lời, đây là những gì bạn sẽ làm về cơ bản bằng cách ghi đè phương thức popatedState () trong lớp mô hình của bạn được mở rộng từ jmodellist, nếu không bạn sẽ bị nhầm với mã lớp cha.
dev-m

Cảm ơn @prof Professional đã cung cấp giải pháp. Tôi nghĩ rằng sự thay đổi giữa bắt đầu và giới hạn bắt đầu có liên quan đến SEF nhưng tôi chưa tìm ra nơi chuyển đổi nào. Bạn có thể gửi bài trả lời cho bạn như câu trả lời và tôi sẽ chấp nhận nó.
Nick Weavers

Câu trả lời:


3

Một số mã mặc định gây nhầm lẫn vì j Joomla sử dụng mã cho các quy trình bắt đầu kết thúc hiển thị trang. Theo yêu cầu, phân trang cần theo hai biến trạng thái được đặt, do đó bạn cần đặt trong phương thức popatedState () được ghi đè của mô hình (nguồn - com_weblinks) -

// List state information
$limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'), 'uint');
$this->setState('list.limit', $limit);

$limitstart = JRequest::getUInt('limitstart', 0);
$this->setState('list.start', $limitstart);

hơn nữa, nếu bạn xem phương thức getPagination () trong lớp cha jmodellist, bạn có thể biết được cách mọi thứ được tính từ các biến trạng thái để hiển thị phân trang.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.