Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add list pagination functionality #29

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

flik1337
Copy link

@flik1337 flik1337 commented Aug 3, 2024

Hi, I have added pagination functionality, as shown in the image.

image

Using the Aira template as an example, when adding pagination to the list on the /post page of Aira:

  1. Add pagination information to static.json

    {
        "paginationList" : [
            {
                "route": "/posts",
                "pageSize": 2,
                "iteratorKey":"posts-loop"
            }
        ]
    }
    
    
  • route: Specifies which route page enables the pagination feature.
  • pageSize: The number of items displayed per page.
  • iteratorKey: Specifies which <ForEach> to paginate.
  1. Add iteratorKey to the <ForEach> element

    <ForEach content="post" as="post" count="{count}" iteratorKey="posts-loop" >
    

    Now, the posts page only displays 2 items.

  2. Use paginator to implement page switching.

    Add a paginator structure inside <ForEach>. This structure must contain two <a> tags and use "prev" and "next" to specify the switching direction.

    <ForEach content="post" as="post" count="{count}" iteratorKey="posts-loop"> 
        <div class="relative border border-transparent border-dashed cursor-pointer p-7 group rounded-2xl" onClick="window.location='{post.link}'">
            xxxx
        </div>
        <paginator>
            <div class="w-full flex justify-between">
                <a prev>
                    Prev
                </a>
                <a next>
                    Next
                </a>
            </div>
        </paginator>
    </ForEach>
    

image
image
image

Here is how it works:

  • During the dev phase, the parser will match the data that needs pagination and perform slicing.

  • During the build phase, the builder will generate multiple subpages under the directory of the page.

    • when accessing /posts/pgn/X, it will load the data for page X. The paginator uses href for page navigation.

image
image

Although I modified some methods in the parser.js, this does not affect the current project.

All function calls remain the same as before.

@tnylea
Copy link
Contributor

tnylea commented Sep 7, 2024

@flik1337 This is amazing!

Thanks for the contribution. Can you go ahead and add this to the docs in this repo here. https://github.com/thedevdojo/static.devdojo.com You can fork it and then submit a PR.

This would go great in the Configurations section below the Custom Build Directory and URL

Oh, I did have one question as well. Wouldn't it be better to remove the word /pgn/2 and instead just create the folder directly in that folder, so /posts/2, /posts/4, etc. I think that would be ideal.

Let me know what you think and go ahead and submit that to the docs and then I'll get this one merged in ;)

Appreciate it!

@flik1337
Copy link
Author

@tnylea Hi, thank you for your suggestion!

I agree that removing the pagination folder prefix (/pgn) makes sense. I've already updated the code and removed that part.

I'm also taking the time to add this section to the static documentation as requested.

Thanks again!

@flik1337
Copy link
Author

@tnylea I've submit a PR to the docs. thedevdojo/static.devdojo.com#6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants