kongondo

Module: Blog

Recommended Posts

Hi All,

I am mainly specialized in frontend-development and have limited experience with PHP. I just started out with Processwire, so my problem might be really basic and specific to the "PW-logic", but now I feel I got stucked with the below problem.

I am trying to rebuild a site (previously WP) on localhost, and I am looking to set up a blog within this. All my "normal" pages are showing up fine, except the blog. When navigating to the blog, a white screen is rendered. My page header (menu, search box...) and footer aren't rendered either. HTTP status is 200 (OK).

Kongondo's blog components (MarkupBlog, ProcessBlog) are installed, I have read the instructions and everything went fine with the installation, my Apache and PW logs having been both error-free regarding this case. I have turned on debugging in config.php. I have an "Example post" with some dummy content, so that one at least should be visible. 

In my templates folder, the blog-related files are empty except for the comments ("* A blank template file to get you up and running quickly with your Blog
 *"). However, in site\modules\MarkupBlog, I have files with regular php-codes. In templates, I have "blog", within which I have two fields, "title" and "blog_body".

Do I miss something regarding templates and template-files? Or is it a different issue?

Thank you in advance!

 

 

 

 

 

 

 

 

Share this post


Link to post
Share on other sites
On 2017-6-20 at 2:15 PM, zkriszti said:

In my templates folder, the blog-related files are empty except for the comments ("* A blank template file to get you up and running quickly with your Blog
 *").

Hi @zkriszti. Seems you installed blog with the option 'blank template files', hence there is no demo content. Blog's documentation, found here, should help you along. It's incomplete but sufficient to get you started.

  • Like 1

Share this post


Link to post
Share on other sites
On 6/26/2017 at 7:39 AM, kongondo said:

Hi @zkriszti. Seems you installed blog with the option 'blank template files', hence there is no demo content. Blog's documentation, found here, should help you along. It's incomplete but sufficient to get you started.

Yes, thank you :) meanwhile I realized this being the problem, so the blog is up and running by now, waiting for my content... :)

Share this post


Link to post
Share on other sites

@kongondo, I have one more question. :) I have not found an option in the admin backend to modify whether I want to output the number of comments on the top or at the bottom. I have found this part of the markup in the MarkupBlog.module, where it refers to $commentsCountTop and $commentsCountBottom boolean variables, so I suppose they should exist as a setting somewhere... I've been looking for this a whole day back and forth, but can't find it... It would be easy to just modify MarkupBlog.module accordingly, but 1. it would contradict the logic (why would this option be a variable then?) 2. I suppose that it got overwritten during a possible update. Thank you in advance. :)

 

Share this post


Link to post
Share on other sites
On 2017-7-1 at 1:28 PM, zkriszti said:

I have not found an option in the admin backend to modify whether I want to output the number of comments on the top or at the bottom. I have found this part of the markup in the MarkupBlog.module, where it refers to $commentsCountTop and $commentsCountBottom boolean variables, so I suppose they should exist as a setting somewhere

Hi. The documentation is still incomplete, sorry. That and similar options found in MarkupBlog.module should be passed to the respective methods. In this case, the method renderPosts(). Its third argument is $options. For instance:

 

$blog = $modules->get('MarkupBlog');
$options = array('post_comments' => 1, 'post_author_text' => 'Authored by');
$posts = $pages->find('template=blog-post, limit=10r');
echo $blog->renderPosts($posts, false, $options);

Please see the method MarkupBlog::getPostsOptions for all available options.

  • Like 1

Share this post


Link to post
Share on other sites

Update: Merged dev 2.4.1 to master.

Changelog

  1. New, cleaner Backend UI.
  2. Better sorting of Posts, Categories and Tags in their dashboards.
  3. New option for posts: post_edit. Allows top or bottom placement of link to edit post for logged in users or non-display of link for all users. Thanks @antoiba86
  4. Code refactoring.

Screenshots in this post:

 

  • Like 1

Share this post


Link to post
Share on other sites

I’d like to add ‘placeholder’ texts in the name, email, and text input fields of the comment function. How do I do this?

Share this post


Link to post
Share on other sites
On 22/07/2017 at 4:15 AM, Claus said:

I’d like to add ‘placeholder’ texts in the name, email, and text input fields of the comment function. How do I do this?

Hi, as you've noted in your other post, it is a Comments module issue. However, we can work something out, sort of.  As you can see here, Comments module allows for preset values (not exactly HTML placeholders) for cite, email, website and text inputs. We can use those. In the next update, I'll make it possible to pass those as part of $options (third argument) to renderComments().

Share this post


Link to post
Share on other sites

This might be more of a PHP-question, but strongly related to the renderNav() function of the blog module.

My blog starting page enumerates my Categories using renderNav(), which works fine (only a category list, no post-listing here yet). But to add a visual tweak to it, I have added an image to each of my categories (one single image to each of the categories, each has its own). Now what I need is a modified html output so that the images should be clickable blocks instead of just the category titles. (Category titles would show up on the image with some transparent background). I think this is quite a frequent visual pattern.

My template file looks like this:

$blog = $modules->get('MarkupBlog');

$urls = $pages->find('template=blog-category, limit=0');
$category_list = $blog->renderNav('', $urls, '', false);

$content = $category_list;

...and output html by $content should look like something like this (instead of just a simple list now) :

<li>
  <a href="[category-url]" class="category-box">
    <img src=[blog-category-img-url] />
    <span class="category-title">[category title here]</span>
  </a>
</li>

...and then I can write the necessary CSS to accomplish the desired visual output.

So how do I go about it? How do I make (or extend) renderNav() to give me an output like this? Basically, I want it to get not just the title but my "blog_category_image" custom field, too. Any help is greatly appreciated. :)

 

Share this post


Link to post
Share on other sites

Quick by the ways first..

41 minutes ago, zkriszti said:

$urls = $pages->find('template=blog-category, limit=0');

Are you sure you don't want to limit? If you are, then no need to add 'limit=0' in your selector.

 

41 minutes ago, zkriszti said:

So how do I go about it? How do I make (or extend) renderNav() to give me an output like this? Basically, I want it to get not just the title but my "blog_category_image" custom field, too.

The easier path would be to copy renderNav(), modify that to your liking and save it as a function somewhere in your site (if you will be reusing it throughout), or in you blog-categories template file. You would then call it (if function is called renderNavCustom) as:

$category_list = renderNavCustom('', $urls, '', false);
$content = $category_list;

Your $urls is a already a PageArray so you should be able to loop through that to grab each category Page's blog_category_image. 

Hope this helps.

Edited by kongondo

Share this post


Link to post
Share on other sites

What would be the way to import blog posts from one PW-DB to another? I had a working PW installation with some blog-posts in it. I then exported the 'blog' fields using  MySQL Workbench, then deleted the fields in the target DB, and then imported the exported SQL-file into this new DB. Alas that didn’t work. The 'blog' fields exist in the new DB, and they are populated with the correct data, but in the PW admin interface they don’t show up under Pages nor under Blog:Posts.

I probably did something terrible?

Share this post


Link to post
Share on other sites
On 06/08/2017 at 6:21 PM, Claus said:

The 'blog' fields exist in the new DB, and they are populated with the correct data, but in the PW admin interface they don’t show up under Pages nor under Blog:Posts.

Hi Claus,

Blog keeps a reference of its parent pages (Posts, Settings, Widgets, etc) in the module's settings in the DB. If you look at the DB table modules in ProcessWire, you will find a row each for each of your configurable modules. In this DB table, under the column class, look for the entry for ProcessBlog. In the data column for this entry, you will see  JSON string similar to the following:

{
  "blogFullyInstalled": 1,
  "blogStyle": "1",
  "schedulePages": 1,
  "commentsUse": 1,
  "templateFilesInstall": "2",
  "tagTemplatesFields": "blog",
  "blog": 1020,
  "blog-posts": 1021,
  "blog-categories": 1022,
  "blog-tags": 1023,
  "blog-comments": 1024,
  "blog-widgets": 1025,
  "blog-authors": 1026,
  "blog-archives": 1027,
  "blog-settings": 1028,
  "blog-asc": 1032,
  "blog-dnc": 1033,
  "blog-dc": 1034,
  "blog-rposts": 1035,
  "blog-rcomments": 1036,
  "blog-broll": 1037,
  "blog-tweets": 1039,
  "blog-pauthor": 1040,
  "quickPostEditor": 1
}

In the above, blog refers to the main Blog page and its ID is 1020; blog-posts refers to the parent Posts page and its ID is 1021, etc.  That is the missing information. If you exported your parent Blog pages verbatim, then the contents of your data column in the DB for ProcessBlog entry in your source DB should match what you want in your target DB. All you need to do is copying them over. If your parent Blog pages' IDs changed, then just edit them in the data column of the target DB.

Hope this resolves your issue. Apologies couldn't answer sooner. 

Share this post


Link to post
Share on other sites

I am finding myself having to deconstruct everything. I am not having an easy time. I am sure I am approaching this wrong. Every step I have overcome has not been without a struggle.

So I want to present the blog posts within the current sites html. So I created my own blog.php with the following code

<?php
$blog = $modules->get("MarkupBlog");
foreach($pages->find("template=blog-post, limit=10") as $child) {
    
    $content .= "
    <div class=\"pure-u-lg-1-3 pure-u-md-1-3 pure-u-1-1\">
        <a href=\"{$child->url}\">{$child->title}</a>
        <img src=\"{$child->blog_images->first->url}\">
    </div>";
}

This works just find. Then I think well when site.com/blog displays the blog post now how do I call the previous and next markup? I believe I have to use the function $blog->renderNextPrevPosts(). Like I said, I am probably approaching this wrong.

Share this post


Link to post
Share on other sites
1 hour ago, RichyRich said:

I am finding myself having to deconstruct everything. I am not having an easy time. I am sure I am approaching this wrong. Every step I have overcome has not been without a struggle.

Hi @RichyRich. Welcome to the forums and ProcessWire. Sorry you are struggling. If you haven't seen them yet, please see the (yet incomplete) docs. They should get you started.

I see you are calling $blog but you are not actually doing anything with it. Did you want to display one blog post per page? Or a number of blog posts?

Share this post


Link to post
Share on other sites

Thank you for a response kongondo & abdus. Yea I realize $blog is not being used. I would like /blog to display 10 blog posts, I am having trouble on how to render the links to the next 10 posts, or a list of categories using $blog. Regarding the issues with navigating pages of 10 blog post, I started writing that myself, but I think it is a waste of time considering I am sure it can be called using $blog

Share this post


Link to post
Share on other sites
42 minutes ago, RichyRich said:

I am having trouble on how to render the links to the next 10 posts

In this particular case, Blog will automatically render the pagination for you. You just need to make sure that the template where you call it allows pagination. Example (@see /ProcessBlog/template-files/blog-posts.php/). 

$blog = $modules->get("MarkupBlog");
//render a limited number of summarised posts
$content = $blog->renderPosts("limit=10", true);
//render a limited number of full posts
//$content = $blog->renderPosts("limit=10");
echo $content;

 

Edited by kongondo

Share this post


Link to post
Share on other sites

***Issue resolved****

Found answer buried in this thread on page 20

 

Hello - just started using ProcessWire and I love it so far! I am having an issue with the blog module. When accessing anything blog related on the frontend, I receive a 404(regular pages work). I've tried all 4 of the structures, but no luck. I'm guessing it has something to do with the URL rewrite. Below are my platform specs:

Windows/IIS

PHP 7

PW: 3.0.62

Blog/MarkupBlog: 2.4.1

Blog demo content installed

 

I have attached my web.config file as well.

 

Thanks in advance for the help. Looking forward to working with this platform!

 

 

 

 

web.config

Share this post


Link to post
Share on other sites
On 7/24/2017 at 10:32 PM, kongondo said:

Your $urls is a already a PageArray so you should be able to loop through that to grab each category Page's blog_category_image.

I still seem to be stuck with this. I most probably misplace something, but what I get as a result is the right URLs, the right titles BUT the very same image for all of my categories (see attachment). The image that is displayed belongs to the last category (the one with the highest ID), bit it is displayed for all the 3 of them. even though they all have their respective images. For test purposes, if I display the ID on the frontend, I get the ID of the last category for all the 3 categories.

The relevant part of my code (based on your original renderNav() function) looks like this:
(because I need to display the images together with the urls and category titles, I suppose that this is where I should get my blog category images as well, and not in a separate loop). 

foreach($nav as $url => $title) {
            
                    $imagelocation = $page->blog_category_image->url; 
                                                     
					if($url == $currentURL) $out .=
                        "<li class='on category-item'>
                            <a class='on category-box' href='$url'>
                                <img src='$imagelocation' />
                                <span class='category-title'>$title</span>
                                <span></span>
                                
                            </a>
                        </li>";
            
					else $out .= 
                        "<li class='category-item'>
                            <a class='category-box' href='$url'>
                                <img src='$imagelocation' />
                                <span class='category-title'>$title</span>
                                <span></span>
                            </a>
                        </li>";
		}

I greatly appreciate your help. :) 

pw_output.PNG

Share this post


Link to post
Share on other sites
On 08/09/2017 at 1:48 PM, zkriszti said:

$imagelocation = $page->blog_category_image->url;

Here you are getting the same image over and over. The image on the current page in the field blog_category_image.

For your needs, maybe just skip your custom renderNav(). Maybe one of the following should fit your needs.

// If showing all categories
$categories = $pages->find('template=blog-category');
$out = '';
if(count($categories)) {
    foreach ($categories as $category) {    
        $on = $page->blog_categories->has($category) ? ' on' : '';
        $out .= "<li class='category-item{$on}'>
                    <a class='category-box{$on}' href='{category->$url}'>
                        <img src='{$category->blog_category_image->url}' />
                        <span class='category-title'>{$category->title}</span>
                        <span></span>
                    </a>
                </li>";    
    }
}

echo $out;

######## OR ########

// If showing only the current post's categories (no need for 'on')
$categories = $page->blog_categories;
if(count($categories)) {
    $out = '';
    foreach ($categories as $category) {    
        $out .= "<li class='category-item'>
                    <a class='category-box' href='{category->$url}'>
                        <img src='{$category->blog_category_image->url}' />
                        <span class='category-title'>{$category->title}</span>
                        <span></span>
                    </a>
                </li>";    
    }
}
    
echo $out;

 

Share this post


Link to post
Share on other sites

I seem to have another issue, and as far as I've found out (having searched all the way through the forum), this is related to the small version of posts stripping tags. More exactly, I can't get 'post_small_allowable_tags' to work. I just can't seem to get the "view more" anchor appear.

The affected page is a blog-category view (based on the module's blog-category.php), where I get a few post excerpts from a given category, ideally with adding that "view more" tag. Which is nowhere to be found in the output. :(

The relevant parts of my template file look like this:

$options = array('post_small_allowable_tags' => '<p><a>', 'post_more_text' => 'tovább');
$content .= $blog->renderPosts($posts, true, $options);

Then the html output looks like this:

<div class="summary">
  <p>It's my blogpost and here is a 
    <a href="http://...">link to my another article in the text working fine.</a>
    Some more text, some more text, some more text.</p>
</div>

It is strange, because inside .summary I do have <p> and <a> tags, but <a> is only for the content (because there is a link in the referred article itself). But I don't have "view more" at the end of the summary.

Thank you very much for your help in advance!

 

Share this post


Link to post
Share on other sites

Hello @kongondo, thanks for making this cool module. I haven't used it yet but from what I've seen, it seems amazing!

I was just on my way to install this when I ran into attached error, is there anyway you can help me out? I have no idea where to even start to fix this.

I tried running the install again after but it seems half it has been setup and cannot overwrite those files (also attached).

I'm running a local version of ProcessWire 3.0.62 using AMPPS.

Thanks!

Edit: it seems it was creating a post when installation failed. Could it because I have a page already called blog? It's setup like this:

http://127.0.0.1/procwire/resources/blog/

I can delete this page and reinstall. But I need to clean the files somehow...

Screen Shot 2017-10-28 at 8.58.49 pm.png

Screen Shot 2017-10-28 at 9.11.33 pm.png

Edited by bot19
idea of potential issue

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 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/
    • By theo
      Here is my first processwire module (beta).
      https://github.com/theo222/ImagePickerField
      A lot of "first times". First time Github, Markdown and of course PW Modules.
      So be gentle please.
      I hope it works.