Jump to content

Module: Blog


Recommended Posts


A couple of things:

  1. What version of Blog did you install? I don't know if you are aware there are two version 1.3 and 2.0. I speak about the latter in a couple of posts above. It will soon become the main version.
  2. If you installed version 2.0, which 'blog structure/style' did you install?
  3. You want to use the blank profile to test Blog. As for the 'double' rendering issue read this post. You probably did not install the blank profile? What you should see, after also copying the /css/ and /js/ that come with Blog to your templates folder is something like this. I repeat here that what you see is only a demo. It is up to you to design Blog to look just the way you want. If you need something that is (almost) ready out of the box (design-wise), then you are better of with the Blog Profile. If you want to design the look of your Blog from scratch plus get some additional features, then use Blog (module) :-)
  4. If using Blog 2.0, read up on install instructions above
  5. If you want to make best use of Blog, read the docs/tutorials here
Link to comment
Share on other sites

@ kongondo

Thanks for the quick reply.

I did use Blog 2.0

Both sites use style 1

I will follow your advice I will re-read  4 & 5 above.

May-be should learn to 'swim' better before tackling Modules.

Thanks again



I will try other styles and see the difference it makes. Is easy on http://lightning.pw

Link to comment
Share on other sites

I'm embarrassed but I need your help.

I'm willing to go back to another option but I installed option #4 but every quickpost (add) blog post writes itselve in the root of the 'home' directory. How/where do I tell the system to write each blogpost automatically as a child of say 'Home/blog' ?

For sure it's dead simple (and I'll have a red face when I'll read the reply) but I cannot see the tree from the wood right now ..

Thanks in advance,


(pw 2.5.3 - Module-blog 2.0.2)

Link to comment
Share on other sites


Yes it is possible using PW access settings (permissions and roles). However, by removing Authors and Tags, is it really still a Blog? :P. Also, when you render posts in the frontend you won't be able to hide author names attached posts.

Link to comment
Share on other sites

@ Kongondo

Firstly, a big thank you for your help! I switched to option #2 and I feel far more confortable with it. Even though I'm far from finished at least I'm really striding foreward as each Soccer team (They all have the same template) now has a different personal blog-category on it's page where the title of the page = the title of the blog-category and obviously ... a single post can appear in several teampages (blog-categories)

the code I used for this is:

<? $blog = $modules->get("MarkupBlog");
$category = $pages->get("/blog/categorieen/")->children->find("title=$page->title");
$posts = $pages->find("blog_categories=$category");
echo $blog->renderPosts($posts,true); ?>

euh so simple to get going .. 

Now .. before I start digging further and get the blog fully functional (comments, css, etc etc) I first would like to translate all EN words to NL -

Q. 1° Is there a specific place where I can do this?

Q. 2° If so, in case there is an update, will it affect the translated terms?

Many thanks,


Link to comment
Share on other sites


You can change this line:

$category = $pages->get("/blog/categorieen/")->children->find("title=$page->title");

to this:

$category = $pages->get("/blog/categorieen/")->child("title=$page->title");

Refer to $page->child($selector) in the cheatsheet

  • Like 1
Link to comment
Share on other sites

Just installed Kongondo blog module in PW multilanguage. Great concept!

I Just have a small question regarding empty template files. If I would like to display posts under a current category (blog_category) I could go with this:

$posts = $pages->find("template=blog-post, blog_categories={$page}");
$blog = $modules->get("MarkupBlog");
//if Blog Posts found, we render them out
if ($posts) {
echo $blog->renderPosts($posts);

else {
echo '<p>No posts found</p>';

But the haeder and footer are displayed UNDER the post. How do I get posts to be between this?

Link to comment
Share on other sites


Thanks for using Blog.

I moved your thread here since this is the support board for the Blog module. Please note it is not the Blog module profile  :P. OK, back to business.

I Just have a small question regarding empty template files. ......But the haeder and footer are displayed UNDER the post. How do I get posts to be between this?

I honestly do not understand the question :-). If you installed with empty template files, there is no header or footer there at all. Are you talking about your custom header and footer? You render the posts where you want them. Please clarify so I can give you a more definitive answer.

As for your code to display posts under a current category (blog_category) your code will only work if you are rendering those posts in a 'category' page similar to what is discussed a few posts above yours (#161 and #163). There is a related solution here if you want to limit posts of only a certain category but rendering the posts on other pages.

Also had some issues with back end markup...

That is very strange. I have never seen that. Maybe because I have never used the PW multi language site profile. Is that the one you are using? Are you using the stable (2.5.x) or dev version of PW? 

Link to comment
Share on other sites

Hi thanks for the reply.

1A. I installed the latest stable PW and choose multi-language. This is were the header/footer come from (_main / _init).

1B. I then installed your blog module which gave me the empty template files. The blog templates give me blog posts or categories (whatever I put there) and under it: header - content / sidebar - footer.

I have seen native PW currently prepend and append the _init / _main to ALL templates - which is fine. But I am not sure how to proceed. _main works with this part, should I add $posts in there?

<div id='main'>

        <!-- main content -->
        <div id='content'>
            <h1><?php echo $title; ?></h1>
            <?php echo $content; ?>

        <!-- sidebar content -->
        <?php if($sidebar): ?>
        <div id='sidebar'>
            <?php echo $sidebar; ?>
        <?php endif; ?>


2. The image with the back end issue is in the blog dashboard (posts/categories/tags). It does no damage, but it's just strange. Must be a comma or something in the admin tempate files somewere.

Link to comment
Share on other sites

Aah I see..

1B: Blog will actually not give you anything unless you selected it yourself/or let the default stay :-). For template files, I don't know if you realise you could have installed demo template files or none at all?

As for the _main / _init stuff, I think you will have to append renderPosts($posts) to $content. Have a read here where Ryan explains how the various site-profiles work. This other tutorial on structuring your template files is also useful. 

2B. Yes, I understood that bit. I just don't know why you are seeing that and others, including myself are not. I will have to test on a multi-language profile install to see if I get the same problem.

Link to comment
Share on other sites

I  can't get the code to work and hope you can help me.., beginner you know.

On the home page I would like to have the 3 latest posts, only title and the first part of the post. hiding post-byline works fine.

I used the code you advised. Is it possible to get latest posts and not only from a certain category. I have tried to put in my three categories (1042, 1043, 1044) ID's but that doesn't work.

$blog = $modules->get('MarkupBlog');
$category = $pages->get(1043);//This is ID of category'Fanions'. Can also get by other selector, e.g. name, title, etc.
$posts = $pages->find("template=blog-post, blog_categories=$category, limit=3");
echo $blog->renderPosts($posts);

Is it possible to truncate the post length? For example a function from a other post by Ryan.

Link to comment
Share on other sites


I used the code you advised. Is it possible to get latest posts and not only from a certain category. I have tried to put in my three categories (1042, 1043, 1044) ID's but that doesn't work.

Please read the documentation here

Posts are always returned sorted by date, latest first if you pass first parameter of renderPosts($posts) as a string

I used the code you advised. Is it possible to get latest posts and not only from a certain category. I have tried to put in my three categories (1042, 1043, 1044) ID's but that doesn't work.

I am not getting you clearly. Are you saying you want posts from ALL categories or from only THREE (1042, 1043 and 1044). If from only three, you can do the following:

$categories = $pages->find('id=1042|1043|1044');
$blog = $modules->get("MarkupBlog");
$posts = $pages->find("template=blog-post, blog_categories={$categories}, limit=10");

if ($posts) {
    echo $blog->renderPosts($posts, true);//the 'true' truncates posts' length

Read here about ProcessWire OR selectors.

Is it possible to truncate the post length? For example a function from a other post by Ryan.

Yes. This is all documented in the Blog tutorials. The default truncate length is 450 characters. You can set a custom length in your Blog settings page.

  • Like 1
Link to comment
Share on other sites

Reading instructions wrong I guess.

Did a new install. Placed the Blog Master folder in modules and installed with demo template files. But this time css and js is off - I can't see css and js under /site/templates/, I CAN find them under /modules/Blog-master/. Am I installing wrong? or should I disgard multi language?

Link to comment
Share on other sites


What you should do is get some sleep then read the instructions again  :lol:  :P  ;) .

The instructions are very clear. You need to read the ReadMe first in its entirety. The reason you don't see the css and js? Here's a quote from the ReadMe 'How to Install':

If you chose to install the demo Template Files, also manually copy over the /css/ and /js/ folders present in Blog module's folder to your /site/templates/ folder.

Link to comment
Share on other sites

Great! you was right, needed some sleep. lol

After the copy css/js it's good. I then disabled all append and prepend for blog templates. Because:

PW latest use _main to output header/body/footer;

and blog uses blog-main.inc to output header/body/footer.

Kongondo, can you tell me which file is used in back end for the /blog/posts/ - /blog/categories/ - /blog/tags/ ???

It seems in the Edit part is this code displayed as text (image I showed earlier).

Link to comment
Share on other sites

Is it possible to exclude pagination only on the homepage render posts? For example to set  MarkupPagerNav to false.

At the moment no. You would have to use CSS to hide the page navs I am afraid..

Kongondo, can you tell me which file is used in back end for the /blog/posts/ - /blog/categories/ - /blog/tags/ ???

It seems in the Edit part is this code displayed as text (image I showed earlier).

I tested in the multi-language site profile and saw something similar. I will raise the issue with Ryan to try resolve this. I don't know what is causing the problem but it is definitely only happening on the multi-language site profile and not the others.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Content

    • By Sebi
      AppApiFile adds the /file endpoint to the AppApi routes definition. Makes it possible to query files via the api. 
      This module relies on the base module AppApi, which must be installed before AppApiFile can do its work.
      You can access all files that are uploaded at any ProcessWire page. Call api/file/route/in/pagetree?file=test.jpg to access a page via its route in the page tree. Alternatively you can call api/file/4242?file=test.jpg (e.g.,) to access a page by its id. The module will make sure that the page is accessible by the active user.
      The GET-param "file" defines the basename of the file which you want to get.
      The following GET-params (optional) can be used to manipulate an image:
      width height maxwidth maxheight cropX cropY Use GET-Param format=base64 to receive the file in base64 format.
    • By MarkE
      This fieldtype and inputfield bundle was built for storing measurement values within a field, rendering them in a variety of formats and converting them to other units or otherwise modifying them via the API.
      The API consists of a number of predefined functions, some of which include...
      render() for rendering the measurement object, valueAs() for converting the value to another unit value, convertTo() for converting the whole measurement object to different units, and add() and subtract() for for modifying the stored value by the value (converted as required) in another measurement. In the admin the inputfield includes a checkbox (which can be optionally disabled) for converting values on page save. For an example if a value was typed in as centimeters, the unit was changed to metres, and the page saved with this checkbox selected, said value would be automatically converted so that e.g. 170 cm becomes 1.7 m.

      A simple length field using Fieldtype Measurement and Inputfield Measurement.
      Combination units (e.g. feet and inches) are also supported.
      Please note that this module is 'proof of concept' at the moment - there are limited units available and quite a lot of code tidying to do. More units will be added shortly.
      See the GitHub at https://github.com/MetaTunes/FieldtypeMeasurement for full details and updates.
    • By tcnet
      File Manager for ProcessWire is a module to manager files and folders from the CMS backend. It supports creating, deleting, renaming, packing, unpacking, uploading, downloading and editing of files and folders. The integrated code editor ACE supports highlighting of all common programming languages.

      This module is probably the most powerful module. You might destroy your processwire installation if you don't exactly know what you doing. Be careful and use it at your own risk!
      ACE code editor
      This module uses ACE code editor available from: https://github.com/ajaxorg/ace

      This module uses the JavaScript dragscroll available from: http://github.com/asvd/dragscroll. Dragscroll adds the ability to drag the table horizontally with the mouse pointer.
      PHP File Manager
      This module uses a modified version of PHP File Manager available from: https://github.com/alexantr/filemanager
    • By tcnet
      This module implements the website live chat service from tawk.to. Actually the module doesn't have to do much. It just need to inserted a few lines of JavaScript just before the closing body tag </body> on each side. However, the module offers additional options to display the widget only on certain pages.
      Create an account
      Visit https://www.tawk.to and create an account. It's free! At some point you will reach a page where you can copy the required JavaScript-code.

      Open the module settings and paste the JavaScript-code into the field as shown below. Click "Submit" and that's all.

      Open the module settings
      The settings for this module are located int the menu Modules=>Configure=>LiveChatTawkTo.

    • By tcnet
      Session Viewer is a module for ProcessWire to list session files and display session data. This module is helpful to display the session data of a specific session or to kick out a logged in user by simply delete his session file. After installation the module is available in the Setup menu.

      The following conditions must be met for the module to work properly:
      Session files
      Session data must be stored in session files, which is the default way in ProcessWire. Sessions stored in the database are not supported by this module. The path to the directory where the session files are stored must be declared in the ProcessWire configuration which is by default: site/assets/sessions.
      Serialize handler
      In order to transform session data easier back to a PHP array, the session data is stored serialized. PHP offers a way to declare a custom serialize handler. This module supports only the default serialize handlers: php, php_binary and php_serialize. WDDX was dropped in PHP 7.4.0 and is therefore not supported by this module as well as any other custom serialize handler. Which serialize handler is actually used you can find out in the module configuration which is available under Modules=>Configure=>SessionViewer.

      Session data
      The session data can be displayed in two different ways. PHP's default output for arrays print_r() or by default for this module nice_r() offered on github: https://github.com/uuf6429/nice_r. There is a setting in the module configuration if someone prefers print_r(). Apart from the better handling and overview of the folded session data the output of nice_r() looks indeed nicer.

      ProcessWire module directory
  • Create New...