Jump to content

Recommended Posts

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 

As of 20 December 2017 ProcessWire versions earlier than 3.x are not supported

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

  • Like 46

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. 

  • Like 8

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...

  • Like 2

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.

  • Like 2

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.

  • Like 1

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!

  • Like 5

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. 

  • Like 3

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

  • Like 2

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)...

  • Like 1

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!  ^-^

  • Like 1

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.

  • Like 1

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 :)

  • Like 1

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.

  • Like 1

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.

  • Like 2

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! :)

  • Like 1

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 :-)

  • Like 2

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! 

  • Like 2

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.

  • Like 1

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.

  • Like 3

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Violet
      Here is GoodKidsClothes.com, a blog about kids clothes - news, style tips, sale alerts, and more.

       
      GoodKidsClothes.com originally ran on Wordpress, and I moved it to Processwire recently, the new Processwire version is shown above. There was a fair amount to change over, since it had 4 years on Wordpress before switching! I kept the colors, background, etc in line with what it had been before - a soft, friendly look. I wasn't seeking for it to be identical to its previous appearance, just similar but updated/better/more fun.
      The html I did from scratch, although I used the W3CSS framework.  I love W3CSS because they handle all the responsive breakpoints, and the default styling is a clean flat modern look with plenty of great pre-sets.
      The reason I moved this site over to ProcessWire was not looks but actually functionality: the new Wordpress editor (Gutenburg) had just come out - one of its quirks is that it couldn't keep up with my typing, so I had to literally slow down my typing, which really defeats the purpose of WP as a blogging CMS. (Processwire's editor keeps up with me just fine). Also it was anyway time for me to manually go through and update old articles, put in new affiliate links etc, so I decided to do everything all at once and switch over to ProcessWire.
      In case anyone is wondering, the switch-over was manual since I was going to examine every article I'd written to either a) update it, b) move it to another of my sites, or c) trash it. This was not time-efficent but this way I wound up with being certain everything was up to date content-wise, plus no unwanted bloat (like extra WP fields) could make its way into my Processwire database.  I simply installed Processwire via 1-click Softaculous install in a subdirectory of the original Wordpress site, with the original site still running. Then after I had the Processwire version fully finished (this took several weeks), I simply uninstalled the Wordpress version and moved the Processwire site into the document root. This way I had less than 1 minute downtime.
      UX/UI
      The first menu link is an all-abilities-inclusive version of "skip to content". The actual text displayed depends on which page template is being used ( this text is assigned in _init). For example, the Article template will display "Scroll to article", while Search Results template will display "Scroll to results". Link styling in the body of article content is designed for both the desktop and mobile user, with simultaneous underlining and highlighting showing the entire link region to aim for when tapping on mobile. On the home page and some other templates as needed, skip links are available within the page. They offer the option to skip past a series of links such as social sharing links, pager navigation, etc for a) the screen reader user and b) the fully-sighted keyboard-only user (no mouse). These links only become visible to the eye when focus comes upon them via tabbing. Tab through the home page to see it in action - this is the template where the most skip links have been needed. Cookie manager - originally I used a slider for turning Google Analytics tracking on/off but changed to checkbox because I could not work out a way to manipulate slider without mouse. Newsletter - field, and feed
      One feature of this site is its newsletter, and you'll see here how Processwire shines. The setup was (and still is) that on days when a new blog post relevant to children's clothes is published, subscribers get a brief email notifying them of the new article and linking to it. This is all handled by MailChimp, which I highly recommend. Under the old Wordpress system, I had to use categories to classify which of the posts wound up going into the newsletter (kids clothes) and which posts didn't (other topics like parenting etc). There was always the chance that under default WP behavior, things would be classified incorrectly if I forgot to specify categories. Under Processwire, I've set up the article template to have a field called "Newsletter" which is a simple drop-down choice of "For newsletter" or "omit from Newsletter". There is no default value, and it's a required field, ensuring that I do remember to specify it one way or another. It's such a relief to do it this way! My newsletter feed was easy to customize under Processwire: I created a feed template that selected a) all the pages using the article template that also had b) the "For newsletter" field selected, and those are listed at /newsletter in feed format. Please note that this feed may be empty right now - I omitted my existing articles from newsletter feed as subscribers have already seen them, and haven't had time to write new articles yet.  To clarify, I'm expecting the newsletter feed at /newsletter to only ever be read by MailChimp, although it's certainly possible to be used by feed readers or read by humans.
      XML sitemap
      Under Processwire, I was able to generate a list of articles in XML format at /sitemap.xml that I can then submit to Google as the XML sitemap for this site. Best of all, unlike web-based crawler-type sitemap generators which generate a static sitemap that you then upload to the document root, my Processwire /sitemap.xml auto-generates each time the page is loaded, so it's always auto-updated - any changes in back office like article deletion, unpublishing, adding new articles etc are reflected automatically in /sitemap.xml.
      Some advantages of Processwire features when templating
      1.  _init.php file - my theme was designed for subsequent use in my other sites, so selected pages for use in nav menu (About, Privacy Policy) are automagically "found" in _init.php as follows:
      $pp = $pages->findOne("template=BN-infopage, sort=created, title*=Privacy"); $ab = $pages->findOne("template=BN-infopage, sort=created, title*=About"); 2.  Made use of Processwire's built-in retina-friendly image resizing class, class="hidpi" to ensure social sharing icon links render at a decent resolution on mobile screens.
      Other info
      To check my html and to help identify problems that are not visible to the eye, I found it incredibly helpful to use the "audit" feature available on Chromium and other Chrome-based browsers. (F12->Audit-> select options you want).
      The order of the blogroll looks a little odd at first glance but it's ordered based purely on publication date. However, I updated some articles and they display the last updated date, which makes the blogroll look like it's not in date order even though it's in publication date order. Also some dates (the older article dates) reflect a user-specified date field, to show the article was valid at the time it was written (e.g. time-sensitive info such as reviews, sale alerts, etc). I'd be happy to explain further if anyone's interested.  Moving forward as I write more articles, there should not be an issue, since I usually update only on or very soon after the publication date, so we should not expect to see wildly different dates on sequential articles from here on in.
       
    • By Robin S
      A community member raised a question and I thought a new sanitizer method for the purpose would be useful, hence...
      Sanitizer Transliterate
      Adds a transliterate method to $sanitizer that performs character replacements as defined in the module config. The default character replacements are based on the defaults from InputfieldPageName, but with uppercase characters included too.
      Usage
      Install the Sanitizer Transliterate module.
      Customise the character replacements in the module config as needed.
      Use the sanitizer on strings like so:
      $transliterated_string = $sanitizer->transliterate($string);
       
      https://github.com/Toutouwai/SanitizerTransliterate
      https://modules.processwire.com/modules/sanitizer-transliterate/
       
    • By dimitrios
      Hello,
      this module can publish content of a Processwire page on a Facebook page, triggered by saving the Processwire page.
      To set it up, configure the module with a Facebook app ID, secret and a Page ID. Following is additional configuration on Facebook for developers:
      Minimum Required Facebook App configuration:
      on Settings -> Basics, provide the App Domains, provide the Site URL, on Settings -> Advanced, set the API version to 2.10, add Product: Facebook Login, on Facebook Login -> Settings, set Client OAuth Login: Yes, set Web OAuth Login: Yes, set Enforce HTTPS: Yes, add "http://www.example.com/processwire/page/" to field Valid OAuth Redirect URIs. This module is configurable as follows:
      Templates: posts can take place only for pages with the defined templates. On/Off switch: specify a checkbox field that will not allow the post if checked. Specify a message and/or an image for the post.
      Usage
      edit the desired PW page and save; it will post right after the initial Facebook log in and permission granting. After that, an access token is kept.
       
      Download
      PW module directory: http://modules.processwire.com/modules/auto-fb-post/ Github: https://github.com/kastrind/AutoFbPost   Note: Facebook SDK for PHP is utilized.


    • By thomasaull
      I created a little helper module to trigger a CI pipeline when your website has been changed. It's quite simple and works like this: As soon as you save a page the module sets a Boolean via a pages save after hook. Once a day via LazyCron the module checks if the Boolean is set and sends a POST Request to a configurable Webhook URL.
      Some ideas to extend this:
      make request type configurable (GET, POST) make the module trigger at a specified time (probably only possible with a server cronjob) trigger manually Anything else? If there's interest, I might put in some more functionality. Let me know what you're interested in. Until then, maybe it is useful for a couple of people 🙂
      Github Repo: https://github.com/thomasaull/CiTrigger
    • By Robin S
      I created this module a while ago and never got around to publicising it, but it has been outed in the latest PW Weekly so here goes the support thread...
      Unique Image Variations
      Ensures that all ImageSizer options and focus settings affect image variation filenames.

      Background
      When using methods that produce image variations such as Pageimage::size(), ProcessWire includes some of the ImageSizer settings (height, width, cropping location, etc) in the variation filename. This is useful so that if you change these settings in your size() call a new variation is generated and you see this variation on the front-end.
      However, ProcessWire does not include several of the other ImageSizer settings in the variation filename:
      upscaling cropping, when set to false or a blank string interlace sharpening quality hidpi quality focus (whether any saved focus area for an image should affect cropping) focus data (the top/left/zoom data for the focus area) This means that if you change any of these settings, either in $config->imageSizerOptions or in an $options array passed to a method like size(), and you already have variations at the requested size/crop, then ProcessWire will not create new variations and will continue to serve the old variations. In other words you won't see the effect of your changed ImageSizer options on the front-end until you delete the old variations.
      Features
      The Unique Image Variations module ensures that any changes to ImageSizer options and any changes to the focus area made in Page Edit are reflected in the variation filename, so new variations will always be generated and displayed on the front-end.
      Installation
      Install the Unique Image Variations module.
      In the module config, set the ImageSizer options that you want to include in image variation filenames.
      Warnings
      Installing the module (and keeping one or more of the options selected in the module config) will cause all existing image variations to be regenerated the next time they are requested. If you have an existing website with a large number of images you may not want the performance impact of that. The module is perhaps best suited to new sites where image variations have not yet been generated.
      Similarly, if you change the module config settings on an existing site then all image variations will be regenerated the next time they are requested.
      If you think you might want to change an ImageSizer option in the future (I'm thinking here primarily of options such as interlace that are typically set in $config->imageSizerOptions) and would not want that change to cause existing image variations to be regenerated then best to not include that option in the module config after you first install the module.
       
      https://github.com/Toutouwai/UniqueImageVariations
      https://modules.processwire.com/modules/unique-image-variations/
×
×
  • Create New...