There are several articles available for creating Blog sites using MODX. The one shown in the modx official site is somewhat dated, but the article actually have a link to the instruction/article of more recent implementation of MODX blog site. Link is here. Better yet, this instruction is accompanied with a package published in the github which has all chunks and a template packaged up to duplicate the blog site that the article discusses, and the demo site is also available to check out the feel. The document states that the demo is working on MODX 2.7. So can I use this setup with MODX 3 site? Furthermore, the instruction assumes you want the Site to be a blogging site. I want to add ‘Blog page’ to already existing general website.
To start, I could have created each chunk and template manually following the instruction but to reduce my typing effort, I went ahead and downloaded the demo package. I also installed dependent extras (getResources, getPage, Collections, and Tagger). Previously, I did not have any of those installed. – I am using pdoTools to get resources and get page.
Again, the setup instruction is written for MODX version 2.7 and the site I am setting up this blog structure is version 3.0.3. Setup also assumes the top page is a site home page. There are several area in chunks and template that refers to 1 and this need to be changed to point to correct Resource. I want to have a blog page as a subpage of the site.
Looking through the template and snippets that I setup with the downloaded package , I found some more modifications were needed.
I will list out those changes.
- My server uses Nginx and it needs additional html tag to specify base url in <head> section of blog template html. Without it, Friendly URL won’t work correctly.
<base href="https://www2.adachis.info/">
- In MODX 3, MODX\Revolution\modDocument does not return “modResource”. It returns “MODX\Revolution\modResource”.
This means I get “MODX/Revolution\modDocument” or “MODX\Revolution\CollectionContainer” in MODX\Revolution\modDocument field depending on resource selected. Two area of “Blog Template” stops working due to this.
- Template tries to pull in “jumbotron_CollectionContainer” or “jumbotron chunk based on ] tag. This tag doesn’t work in MODX 3 as it returns which does not exist and forward slash within chunk name is invalid anyway.
- Template tries to insert or based on conditional modifier 121 but the blog_listing page is not at resources in my use case.
- To mitigate both problems, I have created a system setting 120 in custom namespace/area and set it to id of a blog home page resource I created. Then rewrote tags as follows.
For jumbotron section
For container section
- Note: It will be probably not that difficult to create snippets and replace conditional tags here.
- getResources and getSnippet tags are used to aggregate child resources and parents properties are set to site home page 1. These needed to be changed to aforementioned 120. These changes had to be made on $blog_listing chunk and $jumbotron-CollectionContainer chunk.
- @groups properties are hardcoded in calls to TaggerGetTags snippet. The snippet is called from $aside chunk is setting @groups to 1 and the snippet called from $headder chunk is setting @groups to 2. Make sure this agrees with your tagger group settings. I have first created ‘Category’ group and then ‘Archives’ group so I needed to change them to 2 and 1 respectively.
- Last and least as this is just a demo template, links to “subscribe”, “search”, “Sign up”, “GitHub”, “Twitter” and “Facebook” are all mocked and pointing to itself. You either need to remove or put actual link to them when modifying to suit your site design.
So, in order to create a Blog section within Modx 3 hosted website, using this instruction and elements in the github repo, One needs to be aware of:
- Modx version 3’s breaking change of the model class caused decision logics inside Blog_Template to stop working. Rework of the logic flow was needed.
- Friendly url. Nginx needs base href reference in head section.
- Creating a blog section other than home page location. Needed to change references to 1 system settings to 120, a user created system setting
- Adjust the template design to fit with other area of site design.
Some more miscellaneous items to note.
- $blog_listing_item chunk, content placeholder has a modifier :firstp. There is a firstp snippet that is installed with the package. I am not quite up to speed with what the intended output is. The result is not pleasant, so I replaced it with ellipsis=`500` modifier to limit the content output to first 500 chars followed by ellipsis.
- Also in $blog_listing, getPage snippet uses @blog properties set. This set does not exists so the default property set will be used instead. I think idea is to create a blog property set within getPage snippet to override the default property settings in easy way, if customization is needed.
Part this setup, commenting on the posts are not possible. this need to be setup by yourself and will require Quip extra. that part is not covered by this article. One has to go back to modx documentation’s tutorial section.