PHP:将HTML注入if/Else标记?

时间:2017-01-27 作者:kidcoder SAVE UKRAINE

以下是原始脚本:

<?php
    if ( ! is_user_logged_in() ) {
        $args = array(
            \'redirect\'          => site_url( \'/index.php/portal \' ), 
            \'form_id\'           => \'loginform-custom\',
            \'label_username\'    => __( \'Username\' ),
            \'label_password\'    => __( \'Password\' ),
            \'label_remember\'    => __( \'Remember Me\' ),
            \'label_log_in\'      => __( \'Log in\' ),
            \'remember\'          => true
        );
        wp_login_form( $args );
    } else {
        wp_loginout( index.php/portal() );
    }
?>
我想在这个if/else脚本中注入一些HTML,所以我像这样对它进行了剪切,但我不确定我是否做对了。当我运行它时,它可以工作,但我更关心它是否正确(因为即使写得很差的代码也可能不幸地工作)。

这是我如何把它切开的。

<?php
    if ( ! is_user_logged_in() ) {
        $args = array(
            \'redirect\'          => site_url( \'/index.php/portal \' ), 
            \'form_id\'           => \'loginform-custom\',
            \'label_username\'    => __( \'Username\' ),
            \'label_password\'    => __( \'Password\' ),
            \'label_remember\'    => __( \'Remember Me\' ),
            \'label_log_in\'      => __( \'Log in\' ),
            \'remember\'          => true
        );
        wp_login_form( $args );
?>

<p>The portal is for registered users only.</p>

<?php
    } else {
        wp_loginout( index.php/portal() );
?>

<p>We recommend logging out after each session.</p>
<p><a href="/index.php/portal">Continue to portal</a></p>

<?php } ?>
我做得对吗?

1 个回复
最合适的回答,由SO网友:Jen 整理而成

写得好的代码与写得不好的代码不同,这是一个不同的观点和品味问题。有各种style guides 如果你有兴趣看例子。

就个人而言,在上面的示例中,我会更改两件事:缩进和大括号。

我发现模板中的php打开/关闭标记和html标记很难阅读,因为它们没有与缩进的其余部分对齐:

<?php
if ( ! is_user_logged_in() ) {
    $args = array(
        \'redirect\'          => site_url( \'/index.php/portal \' ), 
        \'form_id\'           => \'loginform-custom\',
        \'label_username\'    => __( \'Username\' ),
        \'label_password\'    => __( \'Password\' ),
        \'label_remember\'    => __( \'Remember Me\' ),
        \'label_log_in\'      => __( \'Log in\' ),
        \'remember\'          => true
    );
    wp_login_form( $args );
    ?>

    <p>The portal is for registered users only.</p>

    <?php
} else {
    wp_loginout( index.php/portal() );
    ?>

    <p>We recommend logging out after each session.</p>
    <p><a href="/index.php/portal">Continue to portal</a></p>

<?php } ?>
这使得每个if/else块中的内容更加清晰。按照同样的思路,我将用冒号和endif标记替换if/else花括号,并将任何php打开/关闭标记移动到与php功能相同的行上。

<?php if ( ! is_user_logged_in() ) : ?>
    <?php 
    $args = array(
        \'redirect\'          => site_url( \'/index.php/portal \' ), 
        \'form_id\'           => \'loginform-custom\',
        \'label_username\'    => __( \'Username\' ),
        \'label_password\'    => __( \'Password\' ),
        \'label_remember\'    => __( \'Remember Me\' ),
        \'label_log_in\'      => __( \'Log in\' ),
        \'remember\'          => true
    );
    wp_login_form( $args ); ?>

    <p>The portal is for registered users only.</p>
<?php else: ?>
    <?php wp_loginout( index.php/portal() ); ?>

    <p>We recommend logging out after each session.</p>
    <p><a href="/index.php/portal">Continue to portal</a></p>
<?php endif; ?>
这样可以更容易地看到哪些if/else/end块彼此相关,也可以问清楚什么是php功能,什么是HTML。

多行php块对我来说有点代码味道,表示应该放在其他地方的函数或类中并在模板中的单行中引用的逻辑:

<?php 
# some other file, maybe have a modules/ or helpers/ directory in your plugin
# or theme that contains functions and classes that are used for functionality.
function 5south_custom_login_form() {
    $args = array(
        \'redirect\'          => site_url( \'/index.php/portal \' ), 
        \'form_id\'           => \'loginform-custom\',
        \'label_username\'    => __( \'Username\' ),
        \'label_password\'    => __( \'Password\' ),
        \'label_remember\'    => __( \'Remember Me\' ),
        \'label_log_in\'      => __( \'Log in\' ),
        \'remember\'          => true
    );
    wp_login_form( $args );
}

# your template file
<?php if ( ! is_user_logged_in() ) : ?>
    <?php 5south_custom_login_form() ?>

    <p>The portal is for registered users only.</p>
<?php else: ?>
    <?php wp_loginout( index.php/portal() ); ?>

    <p>We recommend logging out after each session.</p>
    <p><a href="/index.php/portal">Continue to portal</a></p>
<?php endif; ?>
一般来说,我发现如果一个php中有5-10行以上if 块,通常值得将该功能分解为单独的模板,并将其包含在ifelse 陈述这使得模板逻辑更容易遵循。

如果您发现自己在模板文件中以复杂的方式嵌套If/else语句,那么可能是时候重新评估模板文件的加载方式,并创建一个或多个函数来为每个特定情况选择精确的模板或部分模板了。

有些人会看到我在上面所做的事情,并在他们的嘴里吐了一点。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请