kongondo

Module: Blog

754 posts in this topic

The Module Blog for ProcessWire replicates and extends the popular Blog Profile.

Blog is now in version 2.

Please read the README in the Github link below in its entirety before using this module 

Blog Documentation is here (Work in Progress!)

See this post for new features in version 2 or the readme in GitHub.

To upgrade from version 1, see these instructions.

##################################################

Most of the text below refers to Blog version 1 (left here for posterity)

 

Blog version 1 consists of two modules:

ProcessBlog: Manage Blog in the backend/Admin.

MarkupBlog: Display Blog in the frontend.

Being a module, Blog can be installed in both fresh and existing sites. Note, however, that presently, ProcessBlog is not compatible with existing installs of the Blog Profile. This is because of various structural and naming differences in respect of Fields, Templates, Template Files and Pages. If there is demand for such compatibility, I will code a separate version for managing Blog Profile installs.

In order to use the 'Recent Tweets Widget', you will need to separately install and setup the module 'MarkupTwitterFeed'.

Please read the README in the Github link below in its entirety before using this module (especially the bit about the Pages, etc. created by the module). 

I'll appreciate Beta testers, thanks! Stable release works fine.

Download

Modules Directory: http://modules.processwire.com/modules/process-blog/

Githubhttps://github.com/kongondo/Blog

You can also install from right within your ProcessWire install.

Screenshots (Blog version 1)

ProcessBlog-001.pngProcessBlog-002.pngProcessBlog-003.pngProcessBlog-004.pngProcessBlog-005.pngProcessBlog-007.pngProcessBlog-008.pngProcessBlog-009.pngProcessBlog-010.pngProcessBlog-011.png

Video Demos

ProcessBlog

MarkupBlog

Credits

Ryan Cramer

The Alpha Testers and 'Critics'  :-)

License

GPL2

45 people like this

Share this post


Link to post
Share on other sites

A very wonderful and remarkable piece of work.  Thank you for producing this module.  

I believe and certainly hope that this module will further open the door for acceptance of ProcessWire in a lot of places.

Kongondo, you have talent. 

8 people like this

Share this post


Link to post
Share on other sites

@Charles - you are too kind! Thanks. :)

@all - updated the first post + README...

Share this post


Link to post
Share on other sites

I just installed this module on an existing test site. So far all I can say is "wow!!!"

I did try Ryan's Blog Profile, which is also amazing. The profile seems to have everything. 

This Blog module seems to offer the perfect solution to "I need a blog/news/article system for an existing PW site".

I will need to dig into the folders, especially the CSS, to see how difficult it will be to make the Bog module structure fit in with the navigation and design of the previously existing test site...

Hats off to you Kongondo...

2 people like this

Share this post


Link to post
Share on other sites

Wow looks very good and complete from what i can see in the screenshots. I'm not a blogger myself but i think many other people are, so this module can be very interesting to get some new people atrackted to ProcessWire.

2 people like this

Share this post


Link to post
Share on other sites

Installed, wow! Amazing work.

Already a first beta-testing feedback: I have templates with the word "widget" in template name. They show up in the dashboard > settings tab though they have nothing to do with the blog. And if you publish a post from the dashboard > posts tab, the posts list doesn't update (the post remains as unpublished until you refresh your browser). That could be confusing to the unexperienced.

1 person likes this

Share this post


Link to post
Share on other sites

kongondo - really fantastic - you have put a huge amount of thought and work into this.

I just tested an import from WP using the latest version of Nico's MigratorWordpress. I just edited the config settings in his module to match your template and field names and bingo, a perfect import!

5 people like this

Share this post


Link to post
Share on other sites

Installed, wow! Amazing work.

Already a first beta-testing feedback: I have templates with the word "widget" in template name. They show up in the dashboard > settings tab though they have nothing to do with the blog. And if you publish a post from the dashboard > posts tab, the posts list doesn't update (the post remains as unpublished until you refresh your browser). That could be confusing to the unexperienced.

Thanks for testing totoff.

I believe you are referring to these template files: blog-recent-comments; blog-recent-posts; and blog-recent-tweets. Yes, currently, the template files are not being used. I have been mulling whether to leave them as is for those who wish to directly render the contents of those template files. I'll think a bit more about this but it is likely I will remove the template files. Incidentally, the first 2 templates are quite similar; will probably merge them into one. 

Regarding your second issue, I haven't experienced that (see also video demo). Publishing a post using the 'posts' view, whether as unpublished or published, forces a reload of the page since a button is clicked. The 'posts' table below then shows the newly created post at the very top (selector sorting is by date descending). I think what you probably mean is that when you edit a post, the new post status is not reflected in the posts table. That is correct; this is because the editing happens in a modal (actually an iframe) that is not really aware of the 'page below it'. I will see if I can use jQuery to force a reload of the 'page below' [hope this makes sense! ;-)]

Share this post


Link to post
Share on other sites

Hi all,

Thanks for testing and comments.

Template Files

One thing I should have clarified. The included demo example template files are just that; a demo. They are not part of the 'blog' module. They are not meant to showcase any templating approach. They are intentionally verbose (e.g. similar markup repeated across all of them as opposed to, for example, using head.inc, footer.inc or some other approach e.g., main.php, etc.). The idea is that the user decides how to structure their blog, what CSS framework to use (or not to use), JS, etc. On the contrary, the template files are meant to showcase MarkupBlog. What you can do with its methods/functions. Yes, MarkupBlog generates some markup but these are necessary and minimal. Using wrapper DIVs etc, as shown in the example template files, you can structure your blog however you want to fit in your new/existing site. Even the CSS and JS are demos! :-). In a nutshell, MarkupBlog does not come with its own CSS and JS. What is included is just meant to give you an idea of how to use it :-). In due course,  I will do a write-up of all the methods available in MarkupBlog and what they do.

@Max..

As per above, it is not difficult to fit MarkupBlog into your existing site's structure. In fact, since it is a module, you can even call it wherever you wish, in whatever template files, even your existing ones. What I am saying is that you don't even have to use the example template files! You just need to know the parameters MarkupBlog methods expect and you are on your way. This may be a bit advanced for you at the moment, so you might want to instead edit the example files as much as you wish :D

Role and Permission

Note that Blog installs the role 'blog-author' and permission 'blog'. These are available to you to control access as you wish. They are not automatically applied to any user. With these, you can can control the finer details of your blog. 

Authors

Currently, the 'authors' tab/view only shows the count of 'published' posts per author. I'll soon update this, probably with a two different columns; one showing count of 'published' and the other showing count of 'pending [unpublished]' posts for each author. 

3 people like this

Share this post


Link to post
Share on other sites

I have updated the author's posts' table to show both 'published' and 'pending' posts.

post-894-0-25094000-1400971493_thumb.png

2 people like this

Share this post


Link to post
Share on other sites

Update:

After closing an edit modal (widgets, posts, tags, categories), the parent page now refreshes to reflect relevant changes (e.g. date, author, published status, etc)...

1 person likes this

Share this post


Link to post
Share on other sites

Hi kongondo,

I believe you are referring to these template files: blog-recent-comments; blog-recent-posts; and blog-recent-tweets.

No, I refered to my template files I set up for other purposes than the blog.

I think what you probably mean is that when you edit a post, the new post status is not reflected in the posts table.

Exactly, thanks for making this more clear.

After closing an edit modal (widgets, posts, tags, categories), the parent page now refreshes to reflect relevant changes

Super fast service!  ^-^

1 person likes this

Share this post


Link to post
Share on other sites

Wow, this looks sharp! I'll definitely need to check this out this week, I'm not a blogger but this makes me want to be one :-)

Well done, superb work kongondo.

1 person likes this

Share this post


Link to post
Share on other sites

Fantastic work Kongondo!! Can't wait to try this, been wanting to add a blog to one of my existing PW sites so this is perfect timing :)  Wicked awesome man! Thanks for sharing :)

1 person likes this

Share this post


Link to post
Share on other sites

Hi kongondo,

No, I refered to my template files I set up for other purposes than the blog......

Thanks for clarifying. Fixed in the latest commit. I think the problem was that you have a page called widgets. The previous selector was looking for pages with a parent 'widgets'. Good catch! I have changed the selector to be more specific.

1 person likes this

Share this post


Link to post
Share on other sites

Follow-up to my post above about the 'example template files':

1. If you decide to hide some widgets (say recent posts), the HTML is still showing up and reporting 'no posts found'. That's just an oversight on my part. 'Unavailable' widgets should not even output their HTML; 'no posts found' should mean exactly that. I'll try to fix this later, but it is not a high priority :-)

2. On a related issue, you will need to install and configure MarkupTwitterFeed in order to use the example 'Twitter Widget'.

Update:

I have updated the example Template File 'blog-recent-tweets.php'. The references to some fields were wrong :-). Also updated the README + First Post.

Share this post


Link to post
Share on other sites

I love it when someone posts something as amazing as this! Another one where simply clicking 'Like' is nowhere near enough.

Thank you Kongondo, this is an exceptional contribution.

2 people like this

Share this post


Link to post
Share on other sites

That's amazing - the very day I decided to put a blog on my site, this gets uploaded! Thank you so much! 

I've installed it and incorporated it into my site with surprising ease. 

The only issue I've had is with comment moderation - how do I do it? There's no option in the blog admin. 


EDIT: I found it - edit the post that the comment is on and the section for approving comments is at the bottom. Guess I should have watched the video tutorials! :)

1 person likes this

Share this post


Link to post
Share on other sites

@looeee,

Welcome to the forums! I'm glad the module is of benefit...

Currently, there is no comment moderation within Blog itself. This is deliberate. You have two choices:

1. You can install the module 'Comments Manager' to manage all your comments in one place. It would have been nice to integrate Blog and CM better but currently there are no plans to do so.

2. You can moderate comments on a per post basis. Just edit a post and you will find all comments awaiting your approval :-)

2 people like this

Share this post


Link to post
Share on other sites

Great thanks! The comments manager is just what I was looking for. To make it it a bit more integrated I just moved the "Comments Manager" page from /admin/setup to /admin/blog, which doesn't seem to have caused any problems. 
 

A couple of things: to get widgets from the sidebar to display on non-blog pages, the module has to be called on every page:

//CALL THE MODULE - MarkupBlog
$blogOut = $modules->get("MarkupBlog");

I've just added it to the top of my sidebar.inc for the time being, I'll have to refactor my code a bit in the future to stop it being called twice on blog pages.

Second, to get posts to show only an excerpt, in the template files change the line:

$content .= $blogOut->renderPosts("limit={$limit}");

to 

$content .= $blogOut->renderPosts("limit={$limit}", $small=true);

Currently it looks like the excerpt length is hardcoded to 450 characters - perhaps adding an option for people to set this themselves would be a good idea? In the meantime, for anyone that wants to change this, find the line 

$summary = strip_tags(substr($page->blog_body, 0, 450));

in MarkupBlog.module and set it to whatever you want. 

Great work, I'm getting more impressed the more time I spend with it! 

2 people like this

Share this post


Link to post
Share on other sites

@looeee,

Thanks for further testing this.

One thing I have tried to clarify in my posts further up is that the included Template Files are just demos. Some of the code in there is not even related to MarkupBlog. The code in the Template Files is also deliberately verbose. For instance, there is a lot of repetitive code that could be best split up into includes. I decided to leave it like that so that users could select whatever templating approach they wanted (yes, refactoring needed; I might revisit this decision in future). In order to do this effectively, they need to be familiar with the methods/functions available in MarkupBlog :-). So, I will be writing up a guide covering those methods (e.g. your examples above). :D

Configurable Excerpt Length:

Good suggestion. Please file an issue on GitHub if you can so that I don't forget this.

Cheers.

1 person likes this

Share this post


Link to post
Share on other sites

Kongondo,

Regarding blog_date field. I get the feeling it is designed to be the date/time that the blog post is published, but from what I can see it gets set when the post is first created and doesn't automatically change after that. I might be misunderstanding your use of the field, but I would like to see it change automatically when the post is published and not change after that - maybe even disable user editing of it?

I know we often draft up several posts at a time and publish them later. I don't think we should have to manually adjust this field when publishing the post.

Another thought for you - have you considered integrating this module:

http://modules.processwire.com/modules/schedule-pages/

or the functionality from it into the blog posts tab? This would make WP users feel at home. Thanks for considering.

3 people like this

Share this post


Link to post
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 kixe
      This morning I pushed a module to github which extends the page api with moving and sorting capability.
      https://github.com/kixe/PageSortMove
      /** * CALLABLE * PageSortMove::execute($pageID, $newIndex = 0, $parentID = null); * $modules->get('PageSortMove')->execute($pageID, $newIndex = 0, $parentID = null); * * EXTENDED PAGE API * @property $page->first // under same parent * @property $page->last * * @method $page->first($parentID = null) * @method $page->last($parentID = null) * @method $page->sort($newIndex) * @method $page->move($newIndex, $parentID = null) */ Have a nice weekend.
    • By Robin S
      I have had this module sitting in a 95% complete state for a while now and have finally made the push to get it out there. Thanks to @teppo for his Hanna Code Helper module which I referred to and borrowed from during development.
      https://github.com/Toutouwai/HannaCodeDialog
      HannaCodeDialog
      A module for ProcessWire CMS/CMF. Provides a number of enhancements for working with Hanna Code tags in CKEditor. The main enhancement is that Hanna tags in a CKEditor field may be double-clicked to edit their attributes using core ProcessWire inputfields in a modal dialog.
      Requires the Hanna Code module.
      Installation
      Install the HannaCodeDialog module using any of the normal methods.
      For any CKEditor field where you want the "Insert Hanna tag" dropdown menu to appear in the CKEditor toolbar, visit the field settings and add "HannaDropdown" to the "CKEditor Toolbar" settings field.
      Module configuration
      Visit the module configuration screen to set any of the following:
      Exclude prefix: Hanna tags named with this prefix will not appear in the CKEditor toolbar dropdown menu for Hanna tag insertion. Exclude Hanna tags: Hanna tags selected here will not appear in the CKEditor toolbar dropdown menu for Hanna tag insertion. Background colour of tag widgets: you can customise the background colour used for Hanna tags in CKEditor if you like. Dialog width: in pixels Dialog height: in pixels Features
      Insert tag from toolbar dropdown menu
      Place the cursor in the CKEditor window where you want to insert your Hanna tag, then select the tag from the "Insert Hanna tag" dropdown.

      Edit tag attributes in modal dialog
      Insert a tag using the dropdown or double-click an existing tag in the CKEditor window to edit the tag attributes in a modal dialog.

      Tags are widgets
      Hanna tags that have been inserted in a CKEditor window are "widgets" - they have a background colour for easy identification, are protected from accidental editing, and can be moved within the text by drag-and-drop.

      Options for tag attributes may be defined
      You can define options for a tag attribute so that editors must choose an option rather than type text. This is useful for when only certain strings are valid for an attribute and also has the benefit of avoiding typos.
      Add a new attribute for the Hanna tag, named the same as the existing attribute you want to add options for, followed by "__options". The options themselves are defined as a string, using a pipe character as a delimiter between options. Example for an existing attribute named "vegetables":
      vegetables__options=Spinach|Pumpkin|Celery|Tomato|Brussels Sprout|Potato You can define a default for an attribute as normal. Use a pipe delimiter if defining multiple options as the default, for example:
      vegetables=Tomato|Potato Dynamic options
      Besides defining static options as above, you can use one Hanna tag to dynamically generate options for another. For instance, you could create a Hanna tag that generates options based on images that have been uploaded to the page, or the titles of children of the page.
      Your Hanna tag that generates the options should echo a string of options delimited by pipe characters (i.e. the same format as a static options string).
      You will probably want to name the Hanna tag that generates the options so that it starts with an underscore (or whatever prefix you have configured as the "exclude" prefix in the module config), to avoid it appearing as an insertable tag in the HannaCodeDialog dropdown menu.
      Example for an existing attribute named "image":
      image__options=[[_images_on_page]] And the code for the _images_on_page tag:
      <?php $image_names = array(); $image_fields = $page->fields->find('type=FieldtypeImage')->explode('name'); foreach($image_fields as $image_field) { $image_names = array_unique( array_merge($image_names, $page->$image_field->explode('name') ) ); } echo implode('|', $image_names); Choice of inputfield for attribute
      For attributes which you have defined options for, you can choose the inputfield that is used to select from the options.
      Inputfields that support the selection of a single option are select (this is the default inputfield for attributes with options so it isn't necessary to specify it if you want it) and radios.
      Inputfields that support the selection of multiple options are selectmultiple, asmselect and checkboxes.
      You can also specify a checkbox inputfield - this is not for attributes with defined options but will limit an attribute to an integer value of 1 or 0.
      The names of the inputfield types are case-insensitive.
      Example for an existing attribute named "vegetables":
      vegetables__type=asmselect Descriptions and notes for inputfields
      You can add a description or notes to an attribute and these will be displayed in the dialog.
      Example for an existing attribute named "vegetables":
      vegetables__description=Please select vegetables for your soup. vegetables__notes=Pumpkin and celery is a delicious combination. Notes
      When creating or editing a Hanna tag you can view a basic cheatsheet outlining the HannaCodeDialog features relating to attributes below the "Attributes" config inputfield.
      Troubleshooting
      HannaCodeDialog includes and automatically loads the third-party CKEditor plugins Line Utilities and Widget. If you have added these plugins to your CKEditor field already for some purpose and experience problems with HannaCodeDialog try deactivating those plugins from the CKEditor field settings.
    • By Soma
      PageListImageLabel
      Marty requested and sponsored a new module little while ago.
      http://processwire.c...t-image-option/
      I just wanted to create a separate release thread. Many thanks to Marty for sponsoring and making this possible. This just shows how great this community is.
      So here it is the Page List Image Label module. It enables you to add thumbnails of images from the pages in the admin page tree.
      Download:
      http://modules.processwire.com/modules/page-list-image-label/
      Github: 
      https://github.com/somatonic/PageListImageLabel
      A screenshot of it in production. (old version)

    • By FIA2008
      How can I change the output of `Page::render`?
      I've created a hook before page::render, but when I set the $event->return to something else, my whole page is replaced with that value.
      For example:
       
      public function beforePageRender(HookEvent $event) { $event->return = 'blaat'; } This will cause my whole page to be nothing more than just 'blaat'.
      What I want, is that my menu, footer etc. are still visible but only the content of that page is replaced.