Tại sao bạn cần một số nguyên không có khả năng trong phân trang?


17

Các paginate_linkschức năng tham khảo Codex có một số mẫu mã mà đang được đăng lại trên toàn mạng.

Nó có một phần sử dụng một biến gọi là $big = 999999999; // need an unlikely integer:

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $wp_query->max_num_pages
) );

Và được sử dụng trong str_replacetrong echo paginate_linkschức năng.

Đây có phải là một số hình thức đóng gói?

Câu trả lời:


16

Lưu ý get_pagenum_link( $big ): Điều này sẽ tạo một URL ( không phải liên kết) dựa trên số được cung cấp trong tham số đầu tiên.

Hàm đó được sử dụng để lấy mẫu cơ bản cho URL và số nguyên cao được sử dụng ở đây, bởi vì:

  1. Bạn phải cung cấp một số nguyên làm đối số.
  2. URL kết quả được lọc bằng apply_filters('get_pagenum_link', $result)và có thể được thay đổi bởi các plugin. Rủi ro này cao hơn một chút đối với các số khớp với các trang hiện có, ví dụ: khi plugin thực hiện các tiêu đề riêng cho các trang phụ.

Vì vậy, đây chỉ là một quy ước bẩn thỉu, một tín hiệu cho các plugin khác: Đừng thay đổi điều đó! Tôi nghĩ rằng PHP_INT_MAXsẽ tốt hơn, nhưng vẫn xấu xí. Và tôi tự hỏi có bao nhiêu nhà phát triển plugin biết điều đó.

Số này sau đó được thay thế bằng giữ chỗ cần thiết trong paginate_links().

Những gì bạn thấy ở đây là một API không đầy đủ . Cố gắng học một cái gì đó từ ví dụ này - không phát hành API chưa hoàn chỉnh, hoặc tài liệu của bạn sẽ trông lúng túng. :)


Tôi đồng ý PHP_INT_MAX sẽ là IMO tốt hơn, nhưng sẽ khiến tôi bối rối hơn vào thời điểm đó. Tôi thực sự thích lời giải thích của bạn, nó xác nhận rằng tôi đã suy nghĩ đúng hướng. Tôi chỉ không muốn đưa ra bất kỳ giả định nào.
Jason Green

Vì vậy, điều này chỉ được sử dụng trong trường hợp bộ lọc get_pagenum_linkảnh hưởng đến số trang hiện có ? (kể từ khi paginate_links()sử dụng get_pagenum_link()theo mặc định). Có vẻ như là một trường hợp cực kỳ khó khăn với tôi, trừ khi tôi thiếu một cái gì đó?
Cai

@Cai Có vẻ như nó đã là một vấn đề thực sự một lần. Các cơ sở mã được duy trì trong một thời gian dài có xu hướng chứa đầy các cách giải quyết cho các trường hợp cạnh.
fuxia

vẻ như paginate_links() không phải lúc nào cũng sử dụng get_pagenum_link()theo mặc định, vì vậy tôi tự hỏi liệu đây có phải là quy ước từ trước đó không và liệu 'số nguyên không chắc chắn' có thực sự cần thiết (hoặc nếu cách giải quyết thực sự đơn giản get_pagenum_link())?
Cai
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.