Jump to content

Extending Template-Field contexts to increase field reuse


abdus
 Share

Recommended Posts

Based on this forum post, I wanted to find a more elegant solution for changing a field's settings per template. Hooking the page editor after it generates the form works and may still be needed for more complex modifications. But using field & template context, it's easier to modify the field settings and it greatly reduces the need for creating an almost identical field just to adjust a few things.

In my blog post, I've written on how to extend contextual options to allow any fieldtype / inputfield settings to be changed depending on the template. Hope you find it useful, and if you have any questions or comments, feel free to post them here.

https://abdus.co/blog/doing-more-with-fewer-fields-in-processwire/

  • Like 15
Link to comment
Share on other sites

From @ryan in this blog post

Quote

But thus far, it has been limited to predefined properties: field label, description, visibility, column width, and required state. I've been reluctant to go further than that, because I think there's a fine line between what's useful and what's problematic here. Taken too far, you could easily end up with a confusing mess. Ultimately, the best ones to determine what's useful for field/template context and what's not, are the developers of Fieldtypes and Inputfields. 

 

  • Like 1
Link to comment
Share on other sites

1 minute ago, bernhard said:

yeah, he is the developer of the images fieldtype... so the question is why he thinks it would be bad to handle allowed extensions and maxfile settings in a template context?!

Personal preference, I should think, but he also gave us (well, those of us skilled enough to take advantage) the tools to change that behaviour. ^-^

  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Hi @abdus,

Do you know if it's possible to use this technique to add config fields such as minWidth and maxWidth to the template context for InputfieldImage? My first attempt isn't working:

// Add more image config fields to template context
$this->addHookMethod('InputfieldImage::getConfigAllowContext', function (HookEvent $e) {
    $allowables = ['minWidth', 'minHeight', 'maxWidth', 'maxHeight'];
    $e->return = array_merge($e->return, $allowables);
});

I have a feeling that the reason this doesn't work is because those config fields are inside a fieldset. Adding the whole fieldset would be fine, but the problem is that the fieldset doesn't have a name to add to getConfigAllowContext().

Any ideas?

-----

EDIT: have sussed it out. I used another hook to give names to those fieldsets.

// Give names to image config fieldsets
$wire->addHookAfter('InputfieldImage::getConfigInputfields', function(HookEvent $event) {
    /* @var InputfieldWrapper $wrapper */
    $wrapper = $event->return;
    $f = $wrapper->getChildByName('maxWidth');
    $fieldset = $f->parent;
    $fieldset->name = 'maxDimensions';
    $f = $wrapper->getChildByName('minWidth');
    $fieldset = $f->parent;
    $fieldset->name = 'minDimensions';
});

// Add more image config fields to template context
$this->addHookMethod('InputfieldImage::getConfigAllowContext', function (HookEvent $e) {
    $allowables = ['maxDimensions', 'minDimensions'];
    $e->return = array_merge($e->return, $allowables);
});

 

  • Like 8
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
 Share

×
×
  • Create New...