Jump to content

Recommended Posts

Hey, I'm new and I created a simple module for tagging pages because I didn't found a module for it (sadly this is not a core feature). This module is licensed under the GPL3 and cames with absolutly no warranty at all. You should test the module before using it in production environments. Currently it's an alpha release. if you like the module or have ideas for improvements feel free to post a comment. Currently this fieldtype is only compatible with the Inputfield I've created to because I haven't found  an Inputfield yet, that returns arrays from a single html input.

Greetings Sebi2020

FieldtypeTags.zip.asc

InputfieldTagify.zip

InputfieldTagify.zip.asc

FieldtypeTags.zip

  • Like 4

Share this post


Link to post
Share on other sites

Hello @Sebi2020 , welcome to the forums! 

Could you explain a little further? How your module differs from the standard way of creating tags as pages and using a page field to link the tags to other pages?

 

  • Like 1

Share this post


Link to post
Share on other sites

Nice one @Sebi2020!

Maybe you could look at enhancing the module by allowing the configuration of some Tagify options within the field settings. In particular I'm thinking it would be good to be able to set the "whitelist" and "maxTags" options.

Share this post


Link to post
Share on other sites

@Robin S Thank you for your feedback. In fact I planned to add this features in the next release. I also planned to add autocomplete suggestions based on the already existing tags. 

@Sergio My intention was to store tags in page fields instead of creating a page for every tag you add. By doing so you only need one page/template whcih displays all pages with a given tag. As far as I know the philosophy behind ProcessWire is "Everything is a page" but I don't like to clutter my tree with a page for every tag and in my opinion it's very time consuming to create a page for every tag. 

@flydev Thanks!

Currently I don't know the API very well so I don't know if there is a way to fetch all entries of a given field and not just for the current page.  I would prefer to use the API instead of using the DatabasePDO class.

 

Edited by Sebi2020

Share this post


Link to post
Share on other sites
43 minutes ago, Sebi2020 said:

in my opinion it's very time consuming to create a page for every tag.

Lots of solutions for this from a simple API foreach, to the Batch Child Editor module or even this http://modules.processwire.com/modules/admin-actions-unordered-list-to-pages/

Everyone baulks at the everything is a page at first, but the benefits become apparent and it's actually very elegant and more importantly very flexible if you need to change things down the road.

Not saying there isn't a place for what you have built - just say that there are multiple way to skin a cat 🙂

  • Like 2

Share this post


Link to post
Share on other sites

Most of the page fields (like autocomplete) allow creating new pages on the fly, while editing the actual article page. 

But I totally see place for modules like this (they are always faster to configure for example). 

  • Like 1

Share this post


Link to post
Share on other sites

I just released version 2 of InputfieldTagify:

You can download the zip file from Github:
https://github.com/Sebi2020/InputfieldTagify/releases/tag/v0.0.2

@Robin S

It now supports configuration of predefined whitelist entries (in this case auto-suggestions) and allows you to enable additional delimiters like spaces and semicolons. I plan to include a option for specifying limits on tags in the next release.

Greetings Sebi2020

  • Like 3

Share this post


Link to post
Share on other sites

I've just released a new pre-release of FieldtypeTags and InputfieldTagify

New features include:

  • FieldtypeTags
    • Retrieval of all tags:
      $this('modules')->get('FieldtypeTags')->getAllTags();

       

    • Retrieval of all pages for a specific tag: 
      $this('modules')->get('FieldtypeTags')->getPagesByTag("tagname");

       

  • InputfieldTagify
    • Specification of tag limits

Downloads:
FieldtypeTags v0.1.0-pre: https://github.com/Sebi2020/FieldtypeTags/releases/tag/v0.1.0-pre
InputfieldTagify v0.1.0-pre: https://github.com/Sebi2020/InputfieldTagify/releases/tag/v0.1.0-pre 

Greetings Sebi2020

P.S:  Comments appreciated

Edited by Sebi2020
  • Like 1

Share this post


Link to post
Share on other sites

Thanks for the updates!

I spotted a few little issues in InputfieldTagify...

There are quotes missing around version, autoload and singular in getModuleInfo(): https://github.com/Sebi2020/InputfieldTagify/blob/354acf86ac88baa8c257523cd093ec202c573fe0/InputfieldTagify.module#L18-L20

PHP gives a warning that InputfieldTagify::renderReady() and InputfieldTagify::___processInput() should be compatible with the methods of the Inputfield class that the module extends.

So for renderReady() I think you want:

public function renderReady(Inputfield $parent = null, $renderValueMode = false) {
	$this->addClass("tagify-input");
	return parent::renderReady($parent, $renderValueMode);
}

And for ___processInput():

public function ___processInput(WireInputData $input) {
    //...

 

  • Like 1

Share this post


Link to post
Share on other sites

Thank you for your reply!

2 hours ago, Robin S said:

Thanks for the updates!

I spotted a few little issues in InputfieldTagify...

There are quotes missing around version, autoload and singular in getModuleInfo(): https://github.com/Sebi2020/InputfieldTagify/blob/354acf86ac88baa8c257523cd093ec202c573fe0/InputfieldTagify.module#L18-L20P

Why do you think there must be quotes? ProcessWire  is happy with booleans and integers. Even the core-modules are written in the same way:

		return array(
			'title' => 'Text',
			'version' => 100,
			'summary' => 'Field that stores a single line of text',
			'permanent' => true, 
			);

from wire/modules/Fieldtype/FieldtypeText.module

2 hours ago, Robin S said:

So for renderReady() I think you want:


public function renderReady(Inputfield $parent = null, $renderValueMode = false) {
	$this->addClass("tagify-input");
	return parent::renderReady($parent, $renderValueMode);
}

And for ___processInput():


public function ___processInput(WireInputData $input) {
    //...

 

When do you get this warnings? I cannot reproduce that (with E_ALL enabled in php.ini). 

Which PHP Version did you use? With my Version 7.0.28 everything seems to be fine.

 

Greetings Sebi2020

Share this post


Link to post
Share on other sites
6 minutes ago, Sebi2020 said:

Why do you think there must be quotes? ProcessWire  is happy with booleans and integers. Even the core-modules are written in the same way:


		return array(
			'title' => 'Text',
			'version' => 100,
			'summary' => 'Field that stores a single line of text',
			'permanent' => true, 
			);

from wire/modules/Fieldtype/FieldtypeText.module

I'm talking about the array keys, not the values. If you use a string as an array key the string has to be in quotes or else it is interpreted as a constant. In the FieldtypeText example you show the keys are correctly within quotes.

8 minutes ago, Sebi2020 said:

When do you get this warnings? I cannot reproduce that (with E_ALL enabled in php.ini)

I recommend installing Tracy Debugger - it is good at picking up errors that can otherwise be missed.

2019-02-09_205346.png.4d3a3d166798714cffb86538e3055199.png

Share this post


Link to post
Share on other sites

Oh this was a careless of mine. Thank you for your feedback.

I've just uploaded a new commit which should fix these warnings. I haven't enabled debug mode causing the warnings to be hidden.

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 cosmicsafari
      Hi all,
      I have need to dynamically set InputFieldMultiSelect to  selected on page load based on the status of some items within a database table.
      However I keep running into issues when trying to do this via InputfieldSelect::setOptionAttributes()
      https://processwire.com/api/ref/inputfield-select/set-option-attributes/
      Going by the above it sounds like it should be pretty straight forward, and for certain values it seems to work but not when I wanted to set it to 'selected'.
      For example:
      $f->setOptionAttributes(1030,['foo' => 'test']); The above works as I would have wanted, in that it updates the option with the value 1030, to include the attribute foo="test"
      But the same code above edited to the following:
      $f->setOptionAttributes(1030,['selected' => 'selected']); Doesn't seem to do anything?
      I assume I'm missing something or trying to implement the 'selected' wrongly but I'm not sure how else I should approach this, any advice would be much appreciated.
       
    • 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!
×
×
  • Create New...