0

不确定是否可行,但您可以在模板中使用 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 的方法?

4

3 回答 3

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}

使用这三个数组,分别输出数组一和三如下。(使用数组二不会打印任何内容,因为控制数组是空的。)

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

<p>555-1414</p>
于 2013-06-01T21:09:57.670 回答
1

假设你使用CI 的内置 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);
于 2012-10-12T21:21:02.817 回答
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

于 2013-07-29T22:06:42.910 回答