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 louisstephens
      I have been following @bernhard's great tutorial on creating a Dashboard and everything has very easy to understand so far. However, I need to add a select field that a template is using (so users can create a new page from the dashboard), but I am really at a complete lost on how to achieve this. I have been googling, but can't really find anything on the matter.
      $field = $this->modules->get('InputfieldSelect'); $field->name = "Select Manufacturer"; $field->findPagesSelector = "template=basic-page"; //not needed for select field $field->labelFieldName = "title"; $field->name = "Manufacturer Select"; $field->columnWidth = 34; $fieldset->add($field); I have the above code, which was originally an InputfieldPage, but since this is an options field, I have changed it. Has anyone actually gotten a select from a template (and its' values) in a module?
    • By Lex Sanchez
      Video or Social Post Embed
      Based on the TextformatterVideoEmbed module developed by Ryan Cramer, we have added the possibility to embed publications of the main social networks Facebook, Twitter and Instagram.
      ProcessWire Textformatter module that enables translation of YouTube, Vimeo, Instagram, Facebook, Twitter or Issuu URLs to full embed codes, resulting in a viewable video or social post in textarea fields you apply it to.
      How to install
      Download or Clone from Github: https://github.com/lexsanchez/VideoOrSocialPostEmbed
      Copy the VideoOrSocialPostEmbed.module file to your /site/modules/ directory (or place it in /site/modules/VideoOrSocialPostEmbed/).
      Click check for new modules in ProcessWire Admin Modules screen. Click install for the module labeled: "Video or Social Post Embed".
      Now you will be on the module config screen. Please make note of the config options and set as you see fit.
      How to use
      Edit your body field in Setup > Fields (or whatever field(s) you will be placing videos in). On the details tab, find the Text Formatters field and select "Video or Social Post Embed". Save.
      Edit a page using the field you edited and paste in YouTube, Vimeo, Facebook, Twitter, Instagram and/or Issuu URLs each on their own paragraph.
      Example
      How it might look in your editor (like TinyMCE):
      How it works
      This module uses YouTube, Vimeo, Instagram, Facebook, Twitter and Issuu oEmbed services to generate the embed codes populated in your content. After these services are queried the first time, the embed code is cached so that it doesn't need to be pulled again.
      Configuration
      You may want to update the max width and max height settings on the module's configuration screen. You should make these consistent with what is supported by your site design.
      If you change these max width / max height settings you may also want to check the box to clear cache, so that YouTube/Vimeo/Facebook/Twitter/Instagram/Issuu oembed services will generate new embed codes for you.
      Using with Markdown, Textile or other LML
      This text formatter is looking for a YouTube, Vimeo, Instagram, Facebook, Twitter or Issuu video URL surrounded by paragraph tags. As a result, if you are using Markdown or Textile (or something else like it) you want that text formatter to run before this one. That ensures that the expected paragraph tags will be present when VideoOrSocialPostEmbed runs. You can control the order that text formatters are run in by drag/drop sorting in the field editor.
      Copyright 2018 by Ryan Cramer / Updated by Lex Sanchez
    • By kixe
      Email Verification
      This module provides functions to validate email adresses and hosts. The module generates a textfile for blacklisted mailhosts (trashmail), which will be always up to date.
      Download
      https://modules.processwire.com/modules/email-verification/
      API
      // get module $mailcheck = $modules->get('EmailVerification'); // return bool/ string - automatted update of blacklist file $mailcheck->blacklisted(email|domain) // return bool - validate a top level domain, checks against IANA list $mailcheck->validTLD(tld) // return array of punycoded TLDs - cyclic updated, data pulled from IANA $mailcheck->getTLDs(cycle=2592000) // return bool - checks syntax converts to punycode $mailcheck->validDomainName(domain); // return bool - checks punycode encoded syntax $mailcheck->validHostName(host); // return bool - checks syntax and accessibility $mailcheck->validHost(email|domain) // add a single value to blacklist $mailcheck->addToBlacklist(email|domain) USAGE
      $mailcheck = $modules->get('EmailCheck'); $email = 'susi@trashmail.com'; if($mailcheck->blacklisted($email)) echo 'Email Provider not allowed'; if(!$mailcheck->validHost($email)) echo 'Mailhost not available'; Example blacklist file:  blacklist.txt
       
    • By teppo
      Code Blocks Textformatter is a tiny Textformatter module I cooked up to add support for code blocks to text/textarea/RTE fields on some of the sites I work with. Unlike a full-blown Markdown Textformatter – which is something that we already have in the core – this module simply adds support for fenced and inline code blocks.
      The syntax is based on the GitHub code block documentation, so please refer to that for additional instructions. The README at GitHub also includes some basic examples. As with any Textformatter, in order to enable this one, install it and enable it via field settings. Note that there's no syntax highlighting built in (at least for the time being), so use a tool of your choice for that – personally I prefer Prism.js.
      Since this module doesn't use a Markdown tool behind the scenes, but rather some home baked regular expressions, there's always the possibility that I've missed something – but please let me know if you use this module and run into any issues. On the other hand this module should be relatively fast and unobtrusive, as there are no unnecessary bits of code to run 
      GitHub repository: https://github.com/teppokoivula/TextformatterCodeBlocks Modules directory: http://modules.processwire.com/modules/textformatter-code-blocks/