Как создать строку с учетом пустых переменных? - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь создать заполнитель мета-описание для страницы, если пользователь не включил описание в 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, которые звучат грязно, и я уверен, что для этого должен быть чистый способ.

Ответы [ 3 ]

1 голос
/ 28 июня 2011

добавить функцию, чтобы проверить, установлено ли значение?

т.е.

function checkData($data) {
   if(!empty($data)) {
      return $data;
   } else {
     return '';
   }
}

$description = checkData($name) . ' is a ' . strtolower(checkData($category)) . ' located in ' . checkData($location['city'])  . ', ';
0 голосов
/ 28 июня 2011

Другие переменные должны быть не строковыми, а частью объекта, такого как ... Описание.В этом случае было бы проще вызвать метод Description-> isEmpty (), который возвращает true, если одна из этих переменных пуста.

Если вы застряли в этой конфигурации, вы все равно можете создать массив: $myArray = array ($ name, $ category, ...);и проверить в цикле или, возможно, возвращение in_array ('', $ myArray)

0 голосов
/ 28 июня 2011

Поскольку описание зависит от входных данных, поместите его в собственную функцию или класс для его инкапсуляции:

/**
 * 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 может содержатьмного сложных операторов, в то время как остальная часть программы может справиться с этим, как если бы это было что-то простое.

Однако это не дает ответа на то, как вы могли бы закодировать это внутри этой функции.Но так как данные вывода этой функции сильно зависят от ввода этой функции, вы можете иметь дело только со всеми аспектами, которые навязывают аргументы.

...