kongondo

Module: Blog

Recommended Posts

@kongondo Yesss! It worked, but only when I disabled scheduled post and comments. Is there a way to enable them?

Also, would like to carry over the house styles to the blog.  Ignore this!!

Thank you so much.

Share this post


Link to post
Share on other sites

OK, we are getting somewhere. In my previous testing I had one or two issues with comments but was never able to replicate the issue further. I suggest the following:

  1. Do a cleanup (but do no uninstall Blog)
  2. Make sure you have both Comments field and Schedule Pages modules installed
  3. Run Blog install wizard
  4. Enjoy your new Blog...hopefully :)
Edited by kongondo
  • Like 1

Share this post


Link to post
Share on other sites

Hi @kongondo, here I'm again. The blog works fine and I'm able to style it according to my needs, but somehow on the "posts" homepage I'm not getting the summary view of the posts. I get the full post and a link to the next post at the bottom. How do I get summary posts to work? Thanks.

Share this post


Link to post
Share on other sites

Hi @MaryMatlow,

Please read the docs, here (WIP), especially, this section, but for your specific question, this topic :-). Please note that some newer and amended methods have not yet found their way into the docs, e.g. the method renderRelatedPosts(). However, these are all in this (long, I know) thread but probably best to take a peek at MarkupBlog class itself for all render methods before we get the docs up to speed again.

  • Like 1

Share this post


Link to post
Share on other sites

Hi @kongondo,

I've very busy this past week and haven't had the time look at the documentation. Will do it this weekend and try it out and report back. Thank you very much for your help.

Share this post


Link to post
Share on other sites

HI @kongondo,

So here's the progress. I've a summary page with blog posts listed, and have a full-length blog post page. On the blog-post template I've added an image field, and that image is the splash image to go across the top of the post, below which the post would be rendered. See screenshot:

 

Quote

Screen Shot 2017-01-15 at 9.44.16 PM.png

 

 

The thing I want to do is include this image as part of the summary post list, as in here:

 

Quote

Screen Shot 2017-01-15 at 9.47.59 PM.png

 

Any idea how can I achieve it. Thanks for your help.

Share this post


Link to post
Share on other sites

@kongondo I can't seem to get the featured image to work. Ive added image to blog_image field and am calling it on posts template like this:


<?php
    //CALL THE MODULE - MarkupBlog
    $blog = $modules->get("MarkupBlog");
    //main content
    $featured = array('tag'=>'thumb', 'width'=>550, 'position'=>'above');
    $content .= $blog->renderPosts("limit=7", true, $featured);

    //include the main/common markup
    require_once("blog-main.inc");

There are images in the blog_body field also but none of the images are being rendered.

Share this post


Link to post
Share on other sites

@MaryMatlow,

Seems you missed the third link in my post above :). The array indices were changed to 

'post_image_tag' => 'whatever',

etc..Please see the whole list there or within the module code itself

 

Edited by kongondo
  • Like 1

Share this post


Link to post
Share on other sites

Hi @kongondo, Thanks for your great module and you patient help with it. The blog page and summary page work fine. On the summary page with the array options we can turn off the comment count in the headline, how can i do the same on the blog post also. I'm using your default blog-post template to render single post.

Thanks for your help.

Share this post


Link to post
Share on other sites

Hi @MaryMatlow,

Same way, really. renderPosts() takes 3 arguments, the third of which is $options. Since you need to pass in the 3rd argument, in blog-post.php, line #56, you also have to specify the second argument like so:

$options = array('post_comments'=>0);
$content = $blog->renderPosts($page, false, $options) . $blog->postAuthor() . $renderComments . $blog->renderNextPrevPosts($page);

The 'false' is the second argument. The post will be rendered in full since what that says is that $small = false.

  • Like 2

Share this post


Link to post
Share on other sites

Thanks @kongondo, that's perfect. The blog works beautifully. But now I'm getting a fatal error with the BlogPublishDate module:

Compile Error: Cannot redeclare class BlogPublishDate (line 23 of /xx/xxxxxxxxx/html/site/modules/Blog/BlogPublishDate.module) 

Not sure where this has come from.

Share this post


Link to post
Share on other sites

That's coming from ProcessWire's file compiler; it is not a bug on Blog's side. Try clearing your file compiler cache to see if it solves the issue.  

  • Like 2

Share this post


Link to post
Share on other sites

Hi @kongondo i want to render just one category post on homepage but would like to disable pagination with it. Is there an options array to do that? I couldn't find it.

Second, I want to render posts from two categories on separate templates with different options. For example, when a news article is rendered I do not want author, comments etc but for the blog post I want to keep all that. The full single post uses the blog-post.php template by default. How can i make the news item to use let's say news-item.php?

Thanks.

 

Share this post


Link to post
Share on other sites
On 03/02/2017 at 5:05 PM, MaryMatlow said:

i want to render just one category post on homepage but would like to disable pagination with it. Is there an options array to do that? I couldn't find it.

I am not sure I understand this one. Not sure if you want 1 post from 1 category or several posts from 1 category. Irrespective, pagination only kicks in when you grab a limited number of items and the results returned are a PageArray. 

If what you mean is:

1. Render only 1 post from a given category: Here the trick is to return a Page rather than a PageArray. So, we use a get(). findOne() (if you are using PW 3.X) should also work.

$content = '';
// render a single blog post on Blog Home Page
//$singlePost = $pages->get(11335);// grab by ID
$singlePost = $pages->get('template=blog-post, sort=random, blog_categories=News Article, limit=1');// grab a random post
$content .= $blog->renderPosts($singlePost);

2. Render several posts from only 1 category. In this case, this will return an array. So, to avoid pagination, we need to grab ALL the available post, i.e. no limit (careful with this one if you have lots of posts!).

$content = '';
// render ALL blog posts from a single category on Blog Home Page
$oneCategoryPosts = $pages->find('template=blog-post, blog_categories=News Article');
$content .= $blog->renderPosts($oneCategoryPosts);
// these will also work; passing in a selector
#$selector = "template=blog-post, blog_categories=News Article";
#$content .= $blog->renderPosts($selector);

 

On 03/02/2017 at 5:05 PM, MaryMatlow said:

Second, I want to render posts from two categories on separate templates with different options. For example, when a news article is rendered I do not want author, comments etc but for the blog post I want to keep all that. The full single post uses the blog-post.php template by default. How can i make the news item to use let's say news-item.php?

No need to create a different template for blog posts classified as 'News Article'. Instead, we include some extra logic in the template file blog-post.php. See example below.

// get the category 'News Article'
$newsArticle = $pages->get('template=blog-category, name=news-article');

// special render for blog posts that are classified under 'News Article'
if($page->blog_categories->has($newsArticle)) {
    $options = array('post_categories'=>1, 'post_tags' => 0);// options ONLY for news articles 
    $renderAuthor = '';// don't render blog post author for news articles
    $renderComments = '';// ditto comments
}

// normal blog post
else {
    #$options = array();// if you wish, options for all other blog posts go in here
    $renderAuthor = $blog->postAuthor();// render authors for normal blog posts
    $renderComments = $blog->renderComments($page->blog_comments);// ditto comments
}

$content = $blog->renderPosts($page, false, $options) . $renderAuthor . $renderComments . $blog->renderNextPrevPosts($page);

 

Edited by kongondo
  • Like 2

Share this post


Link to post
Share on other sites

Hey @kongondo, thanks for your detailed response. Regarding, the homepage i should have explained that I need only the latest news article to display, and since there are going to be several news articles the pagination will appear by default, and i don't want to show it. Now I could hide it by using a CSS rule but thought there should be a more elegant solution.

The code for separating options for blog and news articles worked perfectly. :-) Thanks.

I thought I had worked out the rendering of blog and news articles separately but it doesn't seem to work. This is the code I'm using for display of news articles category, but all categories are being displayed:

$posts = $pages->find("template=blog-post, blog_categories='News', limit=10");//grab some posts
                $options = array('post_count' => 1, 'post_comments' => 2, 'post_small_image' => '1', 'post_small_image_width' => '740',);
                $posts = '';
                $posts .= $page->image;
                //render a limited number of summarised posts that belong to this category
                $posts .= $page->blog_body . $blog->renderPosts($posts, true, $options);
                    echo $posts;

Also, no featured image or images within the blog body are showing in any of the posts, summary view or single post view. On the previous site where I used the same code I had no problem with images. Appreciate your help.

Share this post


Link to post
Share on other sites
4 hours ago, MaryMatlow said:

Regarding, the homepage i should have explained that I need only the latest news article to display,

I already answered how to do this :). If you don't want pagination, then, in your case, grab only 1 item.

// GET 1 post, SORTED BY created {you could also sort by '-blog_date'}
$singlePost = $pages->get('template=blog-post, sort=-created, blog_categories=News');
$out = $blog->renderPosts($singlePost);
echo $out;

 

4 hours ago, MaryMatlow said:

This is the code I'm using for display of news articles category, but all categories are being displayed:


$posts = $pages->find("template=blog-post, blog_categories='News', limit=10");//grab some posts
                $options = array('post_count' => 1, 'post_comments' => 2, 'post_small_image' => '1', 'post_small_image_width' => '740',);
                $posts = '';
                $posts .= $page->image;
                //render a limited number of summarised posts that belong to this category
                $posts .= $page->blog_body . $blog->renderPosts($posts, true, $options);
                    echo $posts;

 

I am not being rude but this is the point at which I encourage you to get that 'PHP for beginners' book ;) (e.g., this one) as well as revisit the PW docs. Let's walk through your code:

Line 1#: You grab some posts using find(). That returns a PageArray. You then assign it to the variable $posts.

Line #3: You are overwriting the variable $post (which contains the PageArray from Line #1), assigning it an empty string, i.e. ''.

Line #4: You are appending to the empty string $post an Object which contains the current page's image.

Line # 6: You then append to $post  other stuff.....

That's why it doesn't work as expected :). I am surprised it didn't throw an error. Maybe you have debug turned off? 

  • Like 3

Share this post


Link to post
Share on other sites

@kongondo You are right. I'm a complete PHP novice, trying to wing my way through, copying code without understanding. Obviously that's no way to do things. It's time to teach myself the basics of PHP, and I'm determined to do that. :-) Thanks for pointing out the resources. And thanks for all your help and patience.

  • Like 3

Share this post


Link to post
Share on other sites
5 hours ago, MaryMatlow said:

It's time to teach myself the basics of PHP, and I'm determined to do that

...and we'll be here to help! Please have another go and let us know how it goes :)

  • Like 2

Share this post


Link to post
Share on other sites

Hi @kongondo, it's all coming together nicely. I have one Blog page and other News page (both outside the Blog page structure) and they display summary posts and news articles respectively. I'm using the Style number 3 from Blog configuration. Two issues:

1) When the post/news article opens the path is mysite/posts/blog1 or mysite/posts/news1 which is expected because I'm adding these under "Posts". Ideally I would want them to open as mysite/blog/blog1 or mysite/news/news1. Hope it makes sense. Is there a way to achieve this?

2) Clicking on "Categories" takes me to mysite/categories/news. I would want it go to mysite/news instead where all the summary news posts sit.

Thanks for your help.

Share this post


Link to post
Share on other sites
On 11/02/2017 at 4:21 PM, MaryMatlow said:

1) When the post/news article opens the path is mysite/posts/blog1 or mysite/posts/news1 which is expected because I'm adding these under "Posts". Ideally I would want them to open as mysite/blog/blog1 or mysite/news/news1. Hope it makes sense. Is there a way to achieve this

I am a bit confused here. Do you mean AND and not OR? I.e. do you want normal posts to open as /mysite/blog/blog1/ AND news posts to open as /mysite/news/news1? OR you are happy with either? If AND, then you will need URL rewriting as explained here (quite advanced code) or similar. If you mean OR, then just rename the page 'Posts' to whatever you need, i.e. either 'News' or 'Blog'.

On 11/02/2017 at 4:21 PM, MaryMatlow said:

2) Clicking on "Categories" takes me to mysite/categories/news. I would want it go to mysite/news instead where all the summary news posts sit.

I am not sure I understand this either. I assume you mean clicking on the sub-navigation on the right-hand side (in the demo blog template files)? If yes, that navigation is built using the method renderNav() in MarkupBlog. You might have to create your own custom navigation in that case.

  • Like 1

Share this post


Link to post
Share on other sites

I need some help. I have read all posts and documentation but can not get it to work. I have two questions.

1. Image summary page
My blog index page works but I would like to have the image on the right side. Can I do this with CSS (img.post-featured-image{float:right})?

<div class='row'>
	<div class='col-md-12'>			
		<?php
			$blog = $modules->get("MarkupBlog");
			$options = array('width'=>280, 'alt'=>'title', 'post_small_image'=>2);
			$content = $blog->renderPosts("limit=10", true, $options);
			echo $content; 
		?>	
	</div>
</div>

haddock.png

2. blog-post.php 

How can I output the post that is linked to. I mean the page with the full blog-item? I use this code but it does not work.

$blog = $modules->get("MarkupBlog");
$singlePost = $pages->get('template=blog-post, sort=-created');
$out = $blog->renderPosts($singlePost);
echo $out;

Can anyone help out or give directions on how to find solutions

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 bernhard
      @Sergio asked about the pdf creation process in the showcase thread about my 360° feedback/survey tool and so I went ahead and set my little pdf helper module to public:
       
      Download & Docs: https://gitlab.com/baumrock/RockPdf
       
      You can combine it easily with RockReplacer: 
       
    • By Soma
      LogMaintenance
      A simple ProcessWire module to give some maintenance control over log files. I found myself often having lots of log files for different things that can grow more or less quickly to a size where they can be difficult to maintain. The built in Logger of PW does a good job of giving you the possibility to delete or prune logs. But it has to be done manually and sometimes a log grows into millions of lines, which makes it often impossible to even prune it as it's too large.
      LogMaintenance uses LazyCron to run the maintenance task and there's several settings you can setup on a global or per log basis.
      Archive: will create zip files for each log file in logs/archive/ folder and add the log each time the maintenance is run to a subfolder containing the datetime.
      Lines: keeps logs to a certain number of lines 
      Days: keeps the log to a certain number of days
      Bytes: keeps the log to a certain amount of bytes
      Each setting is checked from top down, the first setting to contain something is used. So if you check the "Archive" option, all other settings are ignored and logs are archived everytime the LazyCron is executed. If you want to keep your logs to a certain amount of bytes just leave all other settings to 0 or blank.
      Per Log Settings
      There's a textarea that you can use to setup a config for a specific log file one per line. All the logs you define here ignore the global settings above. The syntax for the settings is:
      logname:[archive]:[lines]:[days]:[bytes] 
      errors:1:0:0:0 // would archive the errors log messages:0:10000:0:0 // will prune the errors log to 10000 lines  
      The module can be found on github for you to check out. It's still fresh and I'm currently testing.
      https://github.com/somatonic/LogMaintenance
    • By teppo
      Fieldtype Page IDs is a third party Fieldtype that, simply put, stores Page references as integers (Page IDs).
      This fieldtype was built as a quick and dirty workaround for Page Reference fields' inability handle self-references due to circular reference issues. A project I've been working on for a while now includes a combination of RepeaterMatrix content blocks and tagging/categorization system that would've resulted in a lot of duplicate pages (and plenty of unnecessary manual work for content editors) had I used built-in Page Reference fields, and thus a new Fieldtype felt like the most sensible approach.
      Fieldtype Page IDs was designed to be loosely compatible with Page References in order to make conversions between the two feasible, but it is quite limited feature wise:
      largely due to the fact that stored values are actually just integers with no connection to Pages whatsoever some advanced selectors and related features are not supported, and page values can't be directly accessed configuration settings are limited to the bare essentials (selector string and Inputfield class) only a handful of Inputfields (AsmSelect, Checkboxes, Text) are (currently) supported Anyway, in case you need to store Page IDs (and Page IDs only) and are happy with the limitations mentioned above, feel free to give this Fieldtype a try. It has been working fine for me in one particular project, but hasn't been tested that much, so please tread carefully – and let me know if you run into any issues.
      GitHub repository: https://github.com/teppokoivula/FieldtypePageIDs
      Modules directory: https://modules.processwire.com/modules/fieldtype-page-ids/
    • By daniels
      This is a lightweight alternative to other newsletter & newsletter-subscription modules.
      You can find the Module in the Modules directory and on Github
      It can subscribe, update, unsubscribe & delete a user in a list in Mailchimp with MailChimp API 3.0. It does not provide any forms or validation, so you can feel free to use your own. To protect your users, it does not save any user data in logs or sends them to an admin.
      This module fits your needs if you...
      ...use Mailchimp as your newsletter / email-automation tool ...want to let users subscribe to your newsletter on your website ...want to use your own form, validation and messages (with or without the wire forms) ...don't want any personal user data saved in any way in your ProcessWire environment (cf. EU data regulation terms) ...like to subscribe, update, unsubscribe or delete users to/from different lists ...like the Mailchimp UI for creating / sending / reviewing email campaigns *I have only tested it with PHP 7.x so far, so use on owners risk
      EDIT:
      I've updated the module to 0.0.4. I removed the instructions from this forum, so I don't have to maintain it on multiple places. Just checkout the readme on github 🙂
      If you have questions or like to contribute, just post a reply or create an issue or pr on github. 
    • By franciccio-ITALIANO
      Hi, in wordpress homepage we can put a list of LAST ARTICLES AND COMMENTS.
      Can I do same thing with processwire?
      If yes, how?
      There is a tutorial?

      Thanks!