Jump to content

Module: Blog


kongondo

Recommended Posts

  • 1 month later...

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!

 

 

 

 

 

 

 

 

Link to comment
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
Link to comment
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... :)

Link to comment
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. :)

 

Link to comment
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
Link to comment
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
Link to comment
Share on other sites

  • 2 weeks later...
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().

Link to comment
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. :)

 

Link to comment
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
Link to comment
Share on other sites

  • 2 weeks later...

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?

Link to comment
Share on other sites

  • 2 weeks later...
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. 

Link to comment
Share on other sites

  • 2 weeks later...

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.

Link to comment
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?

Link to comment
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

Link to comment
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
Link to comment
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

Link to comment
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

Link to comment
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;

 

Link to comment
Share on other sites

  • 3 weeks later...

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!

 

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...

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
Link to comment
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
×
×
  • Create New...