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 horst
      Wire Mail SMTP

      An extension to the new WireMail base class that uses SMTP-transport

      This module integrates EmailMessage, SMTP and SASL php-libraries from Manuel Lemos into ProcessWire. I use this continously evolved libraries for about 10 years now and there was never a reason or occasion not to do so. I use it nearly every day in my office for automated composing and sending personalized messages with attachments, requests for Disposition Notifications, etc. Also I have used it for sending personalized Bulkmails many times.

      The WireMailSmtp module extends the new email-related WireMail base class introduced in ProcessWire 2.4.1 (while this writing, the dev-branch only).
       
      Here are Ryans announcement.



      Current Version 0.3.0
      get it from the Modules Directory Install and Configure

      Download the module into your site/modules/ directory and install it.

      In the config page you fill in settings for the SMTP server and optionaly the (default) sender, like email address, name and signature.
      You can test the smtp settings directly there. If it says "SUCCESS! SMTP settings appear to work correctly." you are ready to start using it in templates, modules or bootstrap scripts.


      Usage Examples
      The simplest way to use it:
      $numSent = wireMail($to, $from, $subject, $textBody); $numSent = wireMail($to, '', $subject, $textBody); // or with a default sender emailaddress on config page This will send a plain text message to each recipient.
       
      You may also use the object oriented style:
      $mail = wireMail(); // calling an empty wireMail() returns a wireMail object $mail->to($toEmail, $toName); $mail->from = $yourEmailaddress; // if you don't have set a default sender in config // or if you want to override that $mail->subject($subject); $mail->body($textBody); $numSent = $mail->send(); Or chained, like everywhere in ProcessWire:
      $mail = wireMail(); $numSent = $mail->to($toEmail)->subject($subject)->body($textBody)->send(); Additionaly to the basics there are more options available with WireMailSmtp. The main difference compared to the WireMail BaseClass is the sendSingle option. With it you can set only one To-Recipient but additional CC-Recipients.
      $mail = wireMail(); $mail->sendSingle(true)->to($toEmail, $toName)->cc(array('person1@example.com', 'person2@example.com', 'person3@example.com')); $numSent = $mail->subject($subject)->body($textBody)->send(); The same as function call with options array:
      $options = array( 'sendSingle' => true, 'cc' => array('person1@example.com', 'person2@example.com', 'person3@example.com') ); $numSent = wireMail($to, '', $subject, $textBody, $options); There are methods to your disposal to check if you have the right WireMail-Class and if the SMTP-settings are working:
      $mail = wireMail(); if($mail->className != 'WireMailSmtp') { // Uups, wrong WireMail-Class: do something to inform the user and quit echo "<p>Couldn't get the right WireMail-Module (WireMailSmtp). found: {$mail->className}</p>"; return; } if(!$mail->testConnection()) { // Connection not working: echo "<p>Couldn't connect to the SMTP server. Please check the {$mail->className} modules config settings!</p>"; return; } Following are a ...


      List of all options and features


      testConnection () - returns true on success, false on failures


      sendSingle ( true | false ) - default is false

      sendBulk ( true | false ) - default is false, Set this to true if you have lots of recipients (50+)


      to ($recipients) - one emailaddress or array with multiple emailaddresses

      cc ($recipients) - only available with mode sendSingle, one emailaddress or array with multiple emailaddresses

      bcc ($recipients) - one emailaddress or array with multiple emailaddresses

       
      from = 'person@example.com' - emailaddress, can be set in module config (called Sender Emailaddress) but it can be overwritten here

      fromName = 'Name Surname' - optional, can be set in module config (called Sender Name) but it can be overwritten here


      priority (3) - 1 = Highest | 2 = High | 3 = Normal | 4 = Low | 5 = Lowest

      dispositionNotification () or notification () - request a Disposition Notification


      subject ($subject) - subject of the message

      body ($textBody) - use this one alone to create and send plainText emailmessages

      bodyHTML ($htmlBody) - use this to create a Multipart Alternative Emailmessage (containing a HTML-Part and a Plaintext-Part as fallback)

      addSignature ( true | false ) - the default-behave is selectable in config screen, this can be overridden here
      (only available if a signature is defined in the config screen)

      attachment ($filename, $alternativeBasename = "") - add attachment file, optionally alternative basename


      send () - send the message(s) and return number of successful sent messages


      getResult () - returns a dump (array) with all recipients (to, cc, bcc) and settings you have selected with the message, the message subject and body, and lists of successfull addresses and failed addresses,


      logActivity ($logmessage) - you may log success if you want

      logError ($logmessage) - you may log warnings, too. - Errors are logged automaticaly
       
       
      useSentLog (true | false) - intended for usage with e.g. third party newsletter modules - tells the send() method to make usage of the sentLog-methods - the following three sentLog methods are hookable, e.g. if you don't want log into files you may provide your own storage, or add additional functionality here

      sentLogReset ()  - starts a new LogSession - Best usage would be interactively once when setting up a new Newsletter

      sentLogGet ()  - is called automaticly within the send() method - returns an array containing all previously used emailaddresses

      sentLogAdd ($emailaddress)  - is called automaticly within the send() method
       
      Changelog: https://github.com/horst-n/WireMailSmtp/blob/master/CHANGELOG.md
       
    • By Robin S
      An experimental module for adding images to a field via pasting one or more URLs.
      Add Image URLs
      Allows images to be added to an images field by pasting URLs.

      Usage
      Install the Add Image URLs module.
      A "Paste URLs" button will be added to all image fields. Use the button to show a textarea where image URLs may be pasted, one per line. Images are added when the page is saved.
       
      https://github.com/Toutouwai/AddImageUrls
    • By netcarver
      This module provides a very simple interface to a set of named counters. You simply call a single function, next('name'), to pull the next value out of a counter - or to set it up if it does not yet exist. Next() takes a few extra parameters to allow you to increment by values other than 1 or to start at a certain number.
      This provides some similar functionality to the built-in page naming feature of PW, and to this module recently posted by Stikki but I think it offers a little more flexibility than either. Having said that, I do like the simplicity of Stikki's new auto-increment module.
      Module Availability
      Here is my module on Github.
      Here it is in the module repository.
      Example Usage
      Here's how this module can be used to title and name a new page by adding a couple of simple hooks to site/ready.php. This example applies to new pages using a template called 'invoice' that can be quick-added to the page tree. In order to get the following to work, you must edit the template that will be the parent of the 'invoice' template and setup the template for children to "invoice" and set the "Name Format for Children" field to something other than the default blank value (I use  title  as my value.)
      <?php /** * Function to recognise our special template. */ function isInvoiceTemplate($template) { return ($template == 'invoice'); } /** * Pre-load the page title for invoice pages with a unique value * which includes a counter component. */ $pages->addHookBefore("Pages::setupNew", function($event) { $page = $event->arguments(0); $is_invoice = isInvoiceTemplate($page->template); $no_inv_num = $page->title == ''; if ($is_invoice && $no_inv_num) { $counter_name = 'WR-' . date('Y'); $number = $this->modules->get('DatabaseCounters')->next($counter_name, 10, 5000); $page->title = $counter_name . '-' . sprintf("%06u", $number); } }); /** * Prevent ProcessPageEdit from forcing an edit of the name if we got here * through a quickAdd from ProcessPageAdd. We can do this because we * preset the title field in the Pages::setupNew hook. */ $pages->addHookAfter("ProcessPageEdit::loadPage", function($event) { $page = $event->return; $is_invoice = isInvoiceTemplate($page->template); $is_temp = $page->hasStatus(Page::statusTemp); if ($is_invoice && $is_temp) { $page->removeStatus(Page::statusTemp); $event->return = $page; } }); Note, the above code + module is one direct solution to the problem posted here by RyanJ.


      Version History
      1.0.0 The initial release.
    • By flydev
      PulsewayPush
      Send "push" from ProcessWire to Pulseway.
       
      Description
      PulsewayPush simply send a push to a Pulseway instance. If you are using this module, you probably installed Pulseway on your mobile device: you will receive notification on your mobile.
      To get more information about Pulseway, please visit their website.
      Note
      They have a free plan which include 10 notifications (push) each day.
       
      Usage
      Install the PulsewayPush module.
      Then call the module where you like in your module/template code :
      <?php $modules->get("PulsewayPush")->push("The title", "The notification message.", "elevated"); ?>  
      Hookable function
      ___push() ___notify() (the two function do the same thing)
       
      Download
      Github:  https://github.com/flydev-fr/PulsewayPush Modules Directory: https://modules.processwire.com/modules/pulseway-push/  
      Examples of use case
      I needed for our work a system which send notification to mobile device in case of a client request immediate support. Pulseway was choosen because it is already used to monitor our infrastructure.
      An idea, you could use the free plan to monitor your blog or website regarding the number of failed logins attempts (hooking Login/Register?), the automated tool then block the attacker's IP with firewall rules and send you a notification.
       

       
      - - -
      2017-11-22: added the module to the modules directory
       
    • By cosmicsafari
      Hi all,
      Just wondering if its possible to just add some basic output to my modules config page.
      I was wanting to output a bulleted list of some information which I will be pulling from a third party.
      Retrieving the data is fine i'm just not sure how to output it to the config page?
      From what I can see in the link below, it only seems like you can append form items to the page.
      https://processwire.com/blog/posts/new-module-configuration-options/