Rather than use a page id at the start, you could give a path to make it more readable.

SET "/blog" AS_PAGE LIST_RECENT_PAGES_OF_TYPE "Blog Entry" 10

This starts with /blog as the page at the top of the blog area and lists the 10 most recent blog entries.

Suppose you want to list all pages beneath a page, and all their sub-pages as well? That requires a list of lists. First, we list all the children, then we process that list to list all the grand children.

Here we start by listing up to 50 pages immediately beneath the home page and save that as "children_list". Still using that list, for each page we then list up to 50 pages beneath each and start accumulating a "grand_children_list".

On line 5 we then restore the "children_list" and merge it with the restored "grand_children_list", then for good measure we reduce the list, just in case there are any duplicates or null entries. There should not be, but you never know.

Now we have a our long list, we need to do something with it. Perhaps just print a list of links - a sort of sitemap list.

Or we could combine it with our previous work for all pages changed since midnight.

As another embellishment, perhaps rather than pages added, a more interesting list would be pages changed. The best way to do this is with a symbol provided by the Last Updated addon. A catch here is that the LAST_UPDATED symbol requires a page area (or areas) to work from. So for the home page:

SET 1 LAST_UPDATED "Main"

It also returns a date rather than a time, which we can get round with STR_TO_TIME.

Because we have built a list of lists, this may no longer be sorted into strict update order. We solve that by sorting the list. The SORT_BY symbol can be used to return sort order value for each item, and these values are then used to sort the list we are working on.

Having tested and developed from any of the above using the symbol tester, to use the expression in a content block you will need to reformat to just one line within the [% ... %].

In an html block you can keep the lines to make it easier to read/maintain.

All the above Magic Data involves a lot of processing. If performance becomes an issue, an option would be to write some finely crafted php within a custom symbol.

Or you could have a look at Uber List which provides some more powerful listing and filtering symbols such as LIST_ALL_PAGES_WITH_FILTER and AND_WITH_FILTER to add multiple filter conditions to the list. Expressions combining these symbols are built into optimised database queries for making complex lists quickly.