Jump to content

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 bernhard
      --- Please use RockFinder3 ---
    • By MoritzLost
      Cacheable Placeholders
      This module allows you to have pieces of dynamic content inside cached output. This aims to solve the common problem of having a mostly cacheable site, but with pieces of dynamic output here and there.  Consider this simple example, where you want to output a custom greeting to the current user:
      <h1>Good morning, <?= ucfirst($user->name) ?></h1> This snippet means you can't use the template cache (at least for logged-in users), because each user has a different name. Even if 99% of your output is static, you can only cache the pieces that you know won't include this personal greeting. A more common example would be CSRF tokens for HTML forms - those need to be unique by definition, so you can't cache the form wholesale.
      This module solves this problem by introducing cacheable placeholders - small placeholder tokens that get replaced during every request. The replacement is done inside a Page::render hook so it runs during every request, even if the response is served from the template cache. So you can use something like this:
      <h1>Good morning, {{{greeting}}}</h1> Replacement tokens are defined with a callback function that produces the appropriate output and added to the module through a simple hook:
      // site/ready.php wire()->addHookAfter('CachePlaceholders::getTokens', function (HookEvent $e) { $tokens = $e->return; $tokens['greeting'] = [ 'callback' => function (array $tokenData) { return ucfirst(wire('user')->name); } ]; $e->return = $tokens; }); Tokens can also include parameters that are parsed and passed to the callback function. There are more fully annotated examples and step-by-step instructions in the README on Github!
      Features
      A simple and fast token parser that calls the appropriate callback and runs automatically. Tokens may include multiple named or positional parameters, as well as multi-value parameters. A manual mode that allows you to replace tokens in custom pieces of cached content (useful if you're using the $cache API). Some built-in tokens for common use-cases: CSRF-Tokens, replacing values from superglobals and producing random hexadecimal strings. The token format is completely customizable, all delimiters can be changed to avoid collisions with existing tag parsers or template languages. Links
      Github Repository & documentation Module directory (pending approval) If you are interested in learning more, the README is very extensive, with more usage examples, code samples and usage instructions!
    • By Craig
      I've been using Fathom Analytics for a while now and on a growing number of sites, so thought it was about time there was a PW module for it.
      WayFathomAnalytics
      WayFathomAnalytics is a group of modules which will allow you to view your Fathom Analytics dashboard in the PW admin panel and (optionally) automatically add and configure the tracking code on front-end pages.
      Links
      GitHub Readme & documentation Download Zip Modules directory Module settings screenshot What is Fathom Analytics?
      Fathom Analytics is a simple, privacy-focused website analytics tool for bloggers and businesses.

      Stop scrolling through pages of reports and collecting gobs of personal data about your visitors, both of which you probably don't need. Fathom is a simple and private website analytics platform that lets you focus on what's important: your business.
      Privacy focused Fast-loading dashboards, all data is on a single screen Easy to get what you need, no training required Unlimited email reports Private or public dashboard sharing Cookie notices not required (it doesn't use cookies or collect personal data) Displays: top content, top referrers, top goals and more
    • 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:
      Since 0.0.4, instructions and changelog can be found in the README only. You can find it here  🙂
      If you have questions or like to contribute, just post a reply or create an issue or pr on github, thanks!
    • By MoritzLost
      Sorry for the convoluted title. I have a problem with Process modules that define a custom page using the page key through getModuleInfo (as demonstrated in this excellent tutorial by @bernhard). Those pages are created automatically when the module is installed. The problem is that the title of the page only gets set in the current language. That's not a problem if the current language (language of the superuser who is installing the module) is the default language; if it isn't, the Process page is missing a title in the default language. This has the very awkward effect that a user using the backend in the default language (or any other language) will see an empty entry in the setup menu:

      This screenshot comes from my Cache Control module which includes a Process page. Now I realize the description sounds obscure, but for us it's a common setup: We a multiple bilingual sites where the default language is German and the second language is English. While the clients use the CMS in German, as a developer I prefer the English interface, so whenever I install a Process module I get this problem.
      As a module author, is there a way to handle this situation? I guess it would be possible to use post-installation hooks or create the pages manually, but I very much prefer the declarative approach. The page title is already translatable (through the __ function), but of course at the time of installation there is no translation, and as far as I'm aware it's not possible to ship translations with a module so they are used automatically. Could this situation be handled better in the core? I would prefer if the module installation process would always set the title of the Process page in the default language, instead of the language of the current user.
×
×
  • Create New...