Coder Social home page Coder Social logo

Unique Field Keys about acf-builder HOT 3 CLOSED

stoutlogic avatar stoutlogic commented on June 14, 2024
Unique Field Keys

from acf-builder.

Comments (3)

stevep avatar stevep commented on June 14, 2024

In this example from gitter chat:

$text = new FieldsBuilder('Text');
$text
  ->addText('Name', ['key' => 'my_key']);

$foo = new FieldsBuilder('foo');
$foo
  ->addFields($text)
  ->modifyField('Name', function($fieldsBuilder) {
    return $fieldsBuilder
      ->defaultValue('Foo');
  })
  ->setLocation('post_type', '==', 'page');

$bar = new FieldsBuilder('bar');
$bar
  ->addFields($text)
  ->modifyField('Name', function($fieldsBuilder) {
    return $fieldsBuilder
      ->defaultValue('Bar');
  })
 ->setLocation('post_type', '==', 'page');

This will generate the field keys field_foo_my_key and field_bar_my_key. There is still a fundamental issue which will prevent this example from working. Both fields attempt to use the field name Name on the same post type. This won't work because the field names don't get namespaced by ACF unless they are part of a repeater or flexible content area. So one of the above fields must be set to use a different name in the modify callback.

I'm not sure the best solution. Should we automatically generate a namespaced field name based on their field group name? This would make retrieving the fields using get_post_meta or ACF's get_field less transparent, because you would have to know the formula to which a field name is modified.

Instead of simply calling get_field('Name') in the template, you'd have to do something like get_field('foo_Name') or know how the field was namespaced, rather than just having the 1 to 1 mapping of field definition and field retrieval.

That is why I am inclined to leave that as something to be managed in user land.

from acf-builder.

stevep avatar stevep commented on June 14, 2024

The question now becomes how to handle field groups composed with addFields Should the key of a field being added to another, maintain its Field Group's namespace? Or should it abandon the namespace of its original field group and only take on the namespace of its new Field Group?

Given:

$banner = new FieldsBuilder('banner');
$banner
    ->addText('title')
    ->addWysiwyg('content');

$builder = new FieldsBuilder('content');
$builder
    ->addTextarea('summary')
    ->addFields($banner);

Should the keys be:

field_content_summary
field_content_banner_title
field_content_banner_content

or should they be:

field_content_summary
field_content_title
field_content_content

The latter is how it currently works. But what if the content field group already had a title field?
There would be a collision of field keys and names. Solving the key collision issue wouldn't solve the name issue, because when you go to retrieve the value using get_field or get_post_meta based on the name title, there would still be ambiguity.

Perhaps a better system would be to have some sort of collision exception being thrown that tells the user there is a configuration error.

from acf-builder.

stevep avatar stevep commented on June 14, 2024

Closing this issue. An exception will be thrown if a field name already exists for a given field group.

from acf-builder.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.