Statique ou dynamique

J’hésite entre deux formats, équivalents, pour décrire un formulaire (spécifique aux options du plugin socialMeta).

La première version utilise les constructions dynamiques ((new formXXX())) des composants du formulaire :

Dynamique
echo (new formForm('frmreport'))
    ->action(dcCore::app()->admin->getPageURL())
    ->method('post')
    ->fields([
        // Activation
        (new formPara())
            ->separator(' ')
            ->items([
                (new formCheckbox('sm_active', $sm_active))
                    ->value(1),
                (new formLabel(__('Active socialMeta')))
                    ->for('sm_active')
                    ->class('classic'),
            ]),
        // Generic
        (new formFieldset('sm_opt'))
            ->legend(new formLegend(__('Options')))
            ->class('fieldset')
            ->fields([
                (new formPara())
                    ->separator(' ')
                    ->items([
                        (new formCheckbox('sm_on_post', $sm_on_post))
                            ->value(1),
                        (new formLabel(__('Add social meta on posts')))
                            ->for('sm_on_post')
                            ->class('classic'),
                    ]),
                (new formPara())
                    ->separator(' ')
                    ->items([
                        (new formCheckbox('sm_on_page', $sm_on_page))
                            ->value(1),
                        (new formLabel(__('Add social meta on pages')))
                            ->for('sm_on_page')
                            ->class('classic'),
                    ]),
                (new formText('hr')),
                // Specific Facebook
                (new formPara())
                    ->separator(' ')
                    ->items([
                        (new formCheckbox('sm_facebook', $sm_facebook))
                            ->value(1),
                        (new formLabel(__('Use Facebook social meta:')))
                            ->for('sm_facebook')
                            ->class('classic'),
                    ]),
                (new formText(
                    'pre',
                    html::escapeHTML(
                        '<!-- Facebook -->' . "\n" .
                        '<meta property="og:title" content="Plugin socialMeta 0.2 pour Dotclear" />' . "\n" .
                        '<meta property="og:url" content="http://open-time.net/post/2014/01/20/Plugin-socialMeta-02-pour-Dotclear" />' . "\n" .
                        '<meta property="og:site_name" content="Open-Time" />' . "\n" .
                        '<meta property="og:description" content="Nouvelle version de ce petit plugin, ..." />' . "\n" .
                        '<meta property="og:image" content="http://open-time.net/public/illustrations/2014/.googleplus-twitter-facebook_m.jpg" />' . "\n"
                    )
                )),
                // Specific Google
                (new formPara())
                    ->separator(' ')
                    ->items([
                        (new formCheckbox('sm_google', $sm_google))
                            ->value(1),
                        (new formLabel(__('Use Google social meta:')))
                            ->for('sm_google')
                            ->class('classic'),
                    ]),
                (new formText(
                    'pre',
                    html::escapeHTML(
                        '<!-- Google -->' . "\n" .
                        '<meta itemprop="name" content="Plugin socialMeta 0.2 pour Dotclear" />' . "\n" .
                        '<meta itemprop="description" content="Nouvelle version de ce petit plugin, ..." />' . "\n" .
                        '<meta itemprop="image" content="http://open-time.net/public/illustrations/2014/.googleplus-twitter-facebook_m.jpg" />' . "\n"
                    )
                )),
                // Specific Twitter
                (new formPara())
                    ->separator(' ')
                    ->items([
                        (new formCheckbox('sm_twitter', $sm_twitter))
                            ->value(1),
                        (new formLabel(__('Use Twitter social meta:')))
                            ->for('sm_twitter')
                            ->class('classic'),
                    ]),
                (new formText(
                    'pre',
                    html::escapeHTML(
                        '<!-- Twitter -->' . "\n" .
                        '<meta name="twitter:card" content="summary" />' . "\n" .
                        '<meta name="twitter:title" content="Plugin socialMeta 0.2 pour Dotclear" />' . "\n" .
                        '<meta name="twitter:description" content="Nouvelle version de ce petit plugin, ..." />' . "\n" .
                        '<meta name="twitter:image" content="http://open-time.net/public/illustrations/2014/.googleplus-twitter-facebook_m.jpg"/>' . "\n" .
                        '<meta name="twitter:image:alt" content="G+, Twitter et Facebook"/>' . "\n" .
                        '<meta name="twitter:site" content="@franckpaul" />' . "\n" .
                        '<meta name="twitter:creator" content="@franckpaul" />' . "\n"
                    )
                )),
            ]),
        // Settings
        (new formFieldset('sm_conf'))
            ->legend(new formLegend(__('Settings')))
            ->class('fieldset')
            ->fields([
                // Twitter account
                (new formPara())
                    ->separator(' ')
                    ->items([
                        (new formLabel(__('Twitter account:')))
                            ->for('sm_twitter_account'),
                        (new formInput('sm_twitter_account'))
                            ->value(html::escapeHTML($sm_twitter_account))
                            ->size(30)
                            ->maxlength(128)
                            ->extra('aria-describedby="prefix-twitter_account"'),
                    ]),
                (new formPara('prefix-twitter_account'))
                    ->class('form-note')
                    ->items([
                        (new formText('', __('With or without @ prefix.'))),
                    ]),
                // Photoblog
                (new formPara())
                    ->separator(' ')
                    ->items([
                        (new formCheckbox('sm_photo', $sm_photo))
                            ->value(1),
                        (new formLabel(__('This blog is a photoblog')))
                            ->for('sm_photo')
                            ->class('classic')
                            ->extra('aria-describedby="summary_large_image"'),
                    ]),
                (new formPara('summary_large_image'))
                    ->class('form-note')
                    ->items([
                        (new formText('', __('Will use "summary_large_image" twitter card type rather than "summary", and will include the first original photo if possible rather than the medium thumbnail.'))),
                    ]),
                // Default description
                (new formPara())
                    ->separator(' ')
                    ->items([
                        (new formLabel(__('Default description:')))
                            ->for('sm_description'),
                        (new formInput('sm_description'))
                            ->value(html::escapeHTML($sm_description))
                            ->size(80)
                            ->maxlength(255)
                            ->extra('aria-describedby="default_description"'),
                    ]),
                (new formPara('default_description'))
                    ->class('form-note')
                    ->items([
                        (new formText('', __('Will be used if post (or page) have no text.'))),
                    ]),
                // Default image
                (new formPara())
                    ->separator(' ')
                    ->items([
                        (new formLabel(__('Default image (URL):')))
                            ->for('sm_image'),
                        (new formInput('sm_image'))
                            ->value(html::escapeHTML($sm_image))
                            ->size(80)
                            ->maxlength(255)
                            ->extra('aria-describedby="default_image"'),
                    ]),
                (new formPara('default_image'))
                    ->class('form-note')
                    ->items([
                        (new formText('', __('Will be used if post (or page) have no image.'))),
                    ]),
            ]),
        // Button
        (new formPara())->items([
            (new formSubmit('frmsave'))
                ->accesskey('s')
                ->value(__('Save')),
            dcCore::app()->formNonce(false),
        ]),
    ])
    ->render();

La deuxième version utilise les constructions statiques (formXXX::init()) des composants du formulaire :

Statique
echo formForm::init('frmreport')
    ->action(dcCore::app()->admin->getPageURL())
    ->method('post')
    ->fields([
        // Activation
        formPara::init()
            ->separator(' ')
            ->items([
                formCheckbox::init('sm_active', $sm_active)
                    ->value(1),
                formLabel::init(__('Active socialMeta'))
                    ->for('sm_active')
                    ->class('classic'),
            ]),
        // Generic
        formFieldset::init('sm_opt')
            ->legend(formLegend::init(__('Options')))
            ->class('fieldset')
            ->fields([
                (formPara::init())
                    ->separator(' ')
                    ->items([
                        formCheckbox::init('sm_on_post', $sm_on_post)
                            ->value(1),
                        formLabel::init(__('Add social meta on posts'))
                            ->for('sm_on_post')
                            ->class('classic'),
                    ]),
                formPara::init()
                    ->separator(' ')
                    ->items([
                        formCheckbox::init('sm_on_page', $sm_on_page)
                            ->value(1),
                        formLabel::init(__('Add social meta on pages'))
                            ->for('sm_on_page')
                            ->class('classic'),
                    ]),
                formText::init('hr'),
                // Specific Facebook
                formPara::init()
                    ->separator(' ')
                    ->items([
                        formCheckbox::init('sm_facebook', $sm_facebook)
                            ->value(1),
                        formLabel::init(__('Use Facebook social meta:'))
                            ->for('sm_facebook')
                            ->class('classic'),
                    ]),
                formText::init(
                    'pre',
                    html::escapeHTML(
                        '<!-- Facebook -->' . "\n" .
                        '<meta property="og:title" content="Plugin socialMeta 0.2 pour Dotclear" />' . "\n" .
                        '<meta property="og:url" content="http://open-time.net/post/2014/01/20/Plugin-socialMeta-02-pour-Dotclear" />' . "\n" .
                        '<meta property="og:site_name" content="Open-Time" />' . "\n" .
                        '<meta property="og:description" content="Nouvelle version de ce petit plugin, ..." />' . "\n" .
                        '<meta property="og:image" content="http://open-time.net/public/illustrations/2014/.googleplus-twitter-facebook_m.jpg" />' . "\n"
                    )
                ),
                // Specific Google
                formPara::init()
                    ->separator(' ')
                    ->items([
                        formCheckbox::init('sm_google', $sm_google)
                            ->value(1),
                        formLabel::init(__('Use Google social meta:'))
                            ->for('sm_google')
                            ->class('classic'),
                    ]),
                formText::init(
                    'pre',
                    html::escapeHTML(
                        '<!-- Google -->' . "\n" .
                        '<meta itemprop="name" content="Plugin socialMeta 0.2 pour Dotclear" />' . "\n" .
                        '<meta itemprop="description" content="Nouvelle version de ce petit plugin, ..." />' . "\n" .
                        '<meta itemprop="image" content="http://open-time.net/public/illustrations/2014/.googleplus-twitter-facebook_m.jpg" />' . "\n"
                    )
                ),
                // Specific Twitter
                formPara::init()
                    ->separator(' ')
                    ->items([
                        formCheckbox::init('sm_twitter', $sm_twitter)
                            ->value(1),
                        formLabel::init(__('Use Twitter social meta:'))
                            ->for('sm_twitter')
                            ->class('classic'),
                    ]),
                formText::init(
                    'pre',
                    html::escapeHTML(
                        '<!-- Twitter -->' . "\n" .
                        '<meta name="twitter:card" content="summary" />' . "\n" .
                        '<meta name="twitter:title" content="Plugin socialMeta 0.2 pour Dotclear" />' . "\n" .
                        '<meta name="twitter:description" content="Nouvelle version de ce petit plugin, ..." />' . "\n" .
                        '<meta name="twitter:image" content="http://open-time.net/public/illustrations/2014/.googleplus-twitter-facebook_m.jpg"/>' . "\n" .
                        '<meta name="twitter:image:alt" content="G+, Twitter et Facebook"/>' . "\n" .
                        '<meta name="twitter:site" content="@franckpaul" />' . "\n" .
                        '<meta name="twitter:creator" content="@franckpaul" />' . "\n"
                    )
                ),
            ]),
        // Settings
        formFieldset::init('sm_conf')
            ->legend(formLegend::init(__('Settings')))
            ->class('fieldset')
            ->fields([
                // Twitter account
                formPara::init()
                    ->separator(' ')
                    ->items([
                        formLabel::init(__('Twitter account:'))
                            ->for('sm_twitter_account'),
                        formInput::init('sm_twitter_account')
                            ->value(html::escapeHTML($sm_twitter_account))
                            ->size(30)
                            ->maxlength(128)
                            ->extra('aria-describedby="prefix-twitter_account"'),
                    ]),
                formPara::init('prefix-twitter_account')
                    ->class('form-note')
                    ->items([
                        formText::init('', __('With or without @ prefix.')),
                    ]),
                // Photoblog
                formPara::init()
                    ->separator(' ')
                    ->items([
                        formCheckbox::init('sm_photo', $sm_photo)
                            ->value(1),
                        formLabel::init(__('This blog is a photoblog'))
                            ->for('sm_photo')
                            ->class('classic')
                            ->extra('aria-describedby="summary_large_image"'),
                    ]),
                formPara::init('summary_large_image')
                    ->class('form-note')
                    ->items([
                        formText::init('', __('Will use "summary_large_image" twitter card type rather than "summary", and will include the first original photo if possible rather than the medium thumbnail.')),
                    ]),
                // Default description
                formPara::init()
                    ->separator(' ')
                    ->items([
                        formLabel::init(__('Default description:'))
                            ->for('sm_description'),
                        formInput::init('sm_description')
                            ->value(html::escapeHTML($sm_description))
                            ->size(80)
                            ->maxlength(255)
                            ->extra('aria-describedby="default_description"'),
                    ]),
                formPara::init('default_description')
                    ->class('form-note')
                    ->items([
                        formText::init('', __('Will be used if post (or page) have no text.')),
                    ]),
                // Default image
                formPara::init()
                    ->separator(' ')
                    ->items([
                        formLabel::init(__('Default image (URL):'))
                            ->for('sm_image'),
                        formInput::init('sm_image')
                            ->value(html::escapeHTML($sm_image))
                            ->size(80)
                            ->maxlength(255)
                            ->extra('aria-describedby="default_image"'),
                    ]),
                formPara::init('default_image')
                    ->class('form-note')
                    ->items([
                        formText::init('', __('Will be used if post (or page) have no image.')),
                    ]),
            ]),
        // Button
        formPara::init()
            ->items([
                formSubmit::init('frmsave')
                    ->accesskey('s')
                    ->value(__('Save')),
                dcCore::app()->formNonce(false),
            ]),
    ])
    ->render();

Lequel vous parait le plus compréhensible ?

PS : J’ai une petite préférence mais je l’indiquerai plus tard, pour ne pas vous influencer…

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/15636

Haut de page