kongondo

Module: Blog

763 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 justb3a
      Little admin helper module: Using this module you can view all template cache settings at once. E.g. cache status, cache time (configurable). Furthermore it adds the functionality to clear the entire template cache or just the template cache for a given template. Note that this may cause a temporary delay for one or more requests while pages are re-cached.

      GitHub: https://github.com/justb3a/processwire-templatecacheoverview
    • By blad
       
      Hi guys!
      I'm creating a module to manage, edit, publish ... pages. It is very similar to ProcessBatcher.
       
       
      Changelog:
      In progress 
      Features:



      Select pages with your mouse like a desktop enviroment. If you press "edit" the selected pages will appear in a lightbox.


      Drag pages to do actions.
      Any feedback is welcome
       
       
    • By abdus
      I dont know how they work internally, whether they depend on each other, but I'd love to be able to test and buy RepeaterMatrix or Multiplier or Table (or any other) module individually. Whole pack of ProFields modules seems awesome to have, however, being able to buy one for ~$30 --instead of all for $130-- sounds much more affordable and this way I could buy the whole pack part by part in several months and wouldn't think twice. But $130 at once, I can't really justify it (and still havent been able to) just as easily with low (to none) disposable student income.  Or instead, having sales one - twice a year would be great as well.
      One advantage of this change would be allowing more people to buy -> support the development & community -> give feedback -> improve these products. This could also potentially pose a disadvantage where requests from people would increase the headache and time required to respond to all these requests, but this community is more than able to handle that.
      I'm sure there's a reason to why these modules are sold together, and I'd love to hear your side as well, @ryan, (and all other maintainers).
      Regards,
      Abdus.
    • By Richard Jedlička
      Tense    
      Tense (Test ENvironment Setup & Execution) is a command-line tool to easily run tests agains multiple versions of ProcessWire CMF.
      Are you building a module, or a template and you need to make sure it works in all supported ProcessWire versions? Then Tense is exactly what you need. Write the tests in any testing framework, tell Tense which ProcessWire versions you are interested in and it will do the rest for you.

      See example or see usage in a real project.
      How to use?
      1. Install it: 
      composer global require uiii/tense 2. Create tense.yml config:
      tense init 3. Run it:
      tense run  
      For detailed instructions see Github page: https://github.com/uiii/tense
       
      This is made possible thanks to the great wireshell tool by @justb3a, @marcus and others.
       
      What do you think about it? Do you find it useful? Do you have some idea? Did you find some bug? Tell me you opinion. Write it here or in the issue tracker.
    • By ukyo
      FieldtypeFontIconPicker
      v.0.1.6
      Fix FieldtypeFontIconPicker sanitizeValue() v.0.1.5
      Added uikit icon select support (required AdminThemeUikit), because uikit icons not working standalone. v.0.1.4 :
      Fix issue FontIconPicker inside repeater v.0.1.3 :
      FontAwesome updated to 4.7.0 v.0.1.2 :
      Little Corrections Some works about icon pickers inside repeater via ajax load v.0.1.1 :
      FontAwesome updated to 4.6.3 v.0.1.0 :
      Custom CSS file url support Added hook method ___beforeRender(), you can check hook example for usage Added multiple icons library use option Added Ionicons Library Now module using cdn for load icon fonts v.0.0.9 inside dev branch
      Added hook method ___beforeRender(), you can check hook example for usage Added multiple icons library use option Added Ionicons Library Now module using cdn for load icon fonts v.0.0.8
      FontAwesome 4.5 update, Improvements and Performance updates Important ! After update module check your input settings, because i changed input attribute names (This will only effect input options, like theme, category). Changed loading icon method from input:hidden to select>optgroup>option, added module js file for load and correct icon picker container many changes…. v.0.0.7
      FontAwesome updated to 4.4.0 v.0.0.6
      Missed... array compatibility for usage, from [$foo, $bar] to array($foo, $bar) v.0.0.5
      Fix for oldest pw versions (Assets file loding scripts moved to inputfieldfonticonpicker module) v.0.0.4
      Array compatibility for usage, from [$foo, $bar] to array($foo, $bar) v.0.0.3
      Small z-index problem solved v.0.0.2
      MarkupFontIconPicker added v.0.0.1
      Start Point Module allow you to use Fotn-Awesome icons easily. You can select icons directly from icon select list, also you can set settings for each InputfieldFontIconPicker.
       
      NOTE : Module store data without prefix, you need to add "prefix" when you want to show your icon on front-end, because some of front-end frameworks using font-awesome with different "prefix".

      Example :
      if($my-icon-field) echo "<i class='my-prefix-{$my-icon-field}' />"; Hook Before Render Example This example using /site/templates/admin.php file for hook
      wire()->addHook('InputfieldFontIconPicker::beforeRender', function($event) { if(!$event->return) return; // Get Input Name (For specified input hook, if you want apply all InputfieldFontIconPicker remove inputName check) $inputName = ""; if(isset($event->object->attributes['name'])) $inputName = $event->object->attributes['name']; // Get Input Name (For specified input hook, if you want apply all InputfieldFontIconPicker remove inputName check) if($inputName == 'icon_picker') { /** * Load your custom icons function file * Your array need to be same format with Icons/FontAwesome.php or Icons/Ionicons.php * Also you can pass directly an array */ wireIncludeFile('MyCustomIconFile'); // Set icons as $icons variable $icons = MyCustomIconsArray(); // Set your options $return = array( 'attributes' => array( 'category' => '', 'theme' => 'fip-grey', 'empty-icon' => 1, 'empty-icon-value' => '', 'icons-per-page' => 20, 'has-search' => 1 ), 'icons' => $icons ); // Return the event $event->return = $return; } $event->return; }); MarkupFontIconPicker Usage
      // MarkupFontIconPicker::render(YourIconField=string, Options=array) echo MarkupFontIconPicker::render($page->YourIconField, [ 'prefix' => 'uk-icon-', // Icon class prefix, if you have different prefix, default is : "fa fa-" 'tag' => 'span', // Icon tag default is : "i" 'class' => 'fa-lg', // If you have extra cutom classes, for example : icons sizes, Array or Sting value 'style' => 'your custom styles if you have' // Array or String Value ]); Module Using
      Font-Awesome v4.3 jQuery fontIconPicker v2.0.0 Screenshots - InputfieldFontIconPicker input settings

      InputfieldFontIconPicker Setting "Category Select"
       


      InputfieldFontIconPicker Setting "Theme Select"



      Screenshots - InputfieldFontIconPicker page edit views

      InputfieldFontIconPicker Search


      InputfieldFontIconPicker Categories


       
      For issues and other things here is MY Github Repo