我正在尝试为网页构建占位符元描述,以防用户未在CMS中添加说明。
我已经开始使用以下代码,但当然如果其他任何变量都为空,它也会失败,例如$phone
,$location['zip']
等等。
<?php
if (!empty($description)) {
echo '<meta name="description" content="' .$description . '">';
}
else {
// Should return: Apple is a business located in Palo Alto, 95014. Call 408.996.1010...
$description = $name . ' is a ' . strtolower($category) . ' located in ' . $location['city'] . ', ';
$description .= $location['zip'] . '. Call ' . $phone . ' for more details today.';
echo '<meta name="description" content="' . $description . '">';
} ?>
以这种方式构建描述的最有效方法是什么?目前我只能想到嵌套的if语句听起来很乱,我敢肯定必须有一个干净的方法来做到这一点。
答案 0 :(得分:1)
添加一个函数来检查是否设置了值?
即
function checkData($data) {
if(!empty($data)) {
return $data;
} else {
return '';
}
}
$description = checkData($name) . ' is a ' . strtolower(checkData($category)) . ' located in ' . checkData($location['city']) . ', ';
答案 1 :(得分:0)
由于描述是根据输入而变化的,所以将它放入它自己的函数或类中以封装它:
/**
* build a description based on various input variables
* @return string
*/
function build_description($description, $name, $category, array location, $phone) {
// build the description as you see fit.
}
$description = build_description(compact('description', 'name', 'category'));
$metaDescription = sprintf('<meta name="description" content="%s"', htmlspecialchars($description));
完成后,build_description
中的具体实现可以包含许多复杂的语句,而程序的其余部分可以像处理它一样简单处理它。
但是,这并没有回答你如何在该函数内编码。但由于该函数输出的数据在很大程度上取决于该函数的输入,因此您只能处理参数所施加的所有方面。
答案 2 :(得分:0)
定义的其他变量不应该是字符串,而应该是对象的一部分,例如......描述。 在这种情况下,调用一个Description-&gt; isEmpty()会更容易,如果其中一个变量为空,则返回true。
如果您遇到此配置,您仍然可以创建一个数组: $ myArray = array($ name,$ category,...); 并检查一个循环或者返回in_array('',$ myArray)