Codeigniter模板类:检查伪变量是否有值

时间:2012-10-12 20:40:27

标签: codeigniter codeigniter-2

不确定是否可以,但是你可以在模板中使用if语句吗?

因此,如果电话号码没有值,我根本不想显示该句子......

<!DOCTYPE html>
<html lang='en'>

<head>
    <meta charset="utf-8"/>
    <title>{form_title}</title>

</head>


<body>
    <p>You received the following message from {name} through the Gossip Cakes' contact form.</p>

    <p>Their email is {email}</p>

    <p>Their phone number is {phone}</p>

    <p>The message: {message}</p>

</body>


</html>

我想我可以使用直接的php,但是有一种方法可以返回视图的html吗?

3 个答案:

答案 0 :(得分:2)

如果您具有创造性,CI模板确实支持IF语句。我经常使用它们。如果没有数据,您甚至可以使用它们来防止模板元素被解析。

考虑这三个示例数组:

$phone_numbers = array( 
                        array('phone_number'=>'555-1212'), 
                        array('phone_number'=>'555-1313') 
                      )

$phone_numbers = array()

$phone_numbers = array( array('phone_number'=>'555-1414') )

并且考虑这是你的html中的相关部分:

{phone_numbers} <p>{phone_number}</p> {phone_numbers}

使用三个阵列,相应的输出阵列一和三如下。 (使用数组2将不会打印任何内容,因为控件数组为空。)

<p>555-1212</p><p>555-1313</p>

<p>555-1414</p>

答案 1 :(得分:1)

假设您正在使用CI's built in parser,则必须事先准备好所有变量。此时不支持条件,变量赋值或超出循环和基本令牌替换的任何内容。

要在CI中执行此操作,您必须在控制器中准备整个消息,如下所示:

if ($phone) {
    $data['phone_msg'] = "<p>Their phone number is $phone</p>";
} else {
    $data['phone_msg'] = '';
}

不是一个好的解决方案。我个人推荐Twig,如果你正在寻找一个很好的模板解析器。您对“我想我可以使用直接PHP”的想法也非常好。

  

是否有返回视图html的方法?

使用view()的第三个参数,如下所示:

$html = $this->load->view('myview', $mydata, TRUE);
echo 'Here is the HTML:';
echo $html;
// OR...
echo $this->parser->parse_string($html, NULL, TRUE);

答案 2 :(得分:0)

类MY_Parser扩展了CI_Parser {

/**
 *  Parse a template
 *
 * Parses pseudo-variables contained in the specified template,
 * replacing them with the data in the second param, 
 * and clean the variables that have not been set
 *
 * @access  public
 * @param   string
 * @param   array
 * @param   bool
 * @return  string
 */
function _parse($template, $data, $return = FALSE)
{
    if ($template == '')
    {
        return FALSE;
    }

    foreach ($data as $key => $val)
    {
        if (is_array($val))
        {
            $template = $this->_parse_pair($key, $val, $template);
        }
        else
        {
            $template = $this->_parse_single($key, (string)$val, $template);
        }
    }

    #$template = preg_replace('/\{.*\}/','',$template);
    $patron = '/\\'.$this->l_delim.'.*\\'.$this->r_delim.'/';
    $template = preg_replace($patron,'',$template);
    if ($return == FALSE)
    {
        $CI =& get_instance();
        $CI->output->append_output($template);
    }

    return $template;
}

}

享受:D