Как создать шаблон для групп флажков, чтобы избежать дублирования кода на стороне сервера?
Недавно я нашел вопрос (stackoverflow.com/questions/30556100/how-to-uncheck-all-checkboxes-if-one-checkbox-checked). Теперь я хотел бы создать шаблон для генерации HTML, так как кажется хорошей идеей избежать дублирования кода. Вот как генерируется мой html-код:
// ---------------------------------------
// --- Populate "Body Type" dropdown list:
// ---------------------------------------
// for populate body types:
$bodytype = array();
// Select exsiting body type from database:
$prep_stmt = " SELECT id, name FROM body_type";
$stmt = $mysqli->prepare($prep_stmt);
if ($stmt) {
// Bind "$userId" to parameter.
//$stmt->bind_param('i', $userId);
// Execute the prepared query.
$stmt->execute();
$stmt->store_result();
// get variables from result.
$stmt->bind_result($id, $name);
// Fetch all the records:
while ($stmt->fetch()) {
// XSS protection as we might print these values
$name = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $name);
$id = filter_var($id,FILTER_SANITIZE_NUMBER_INT);
$type = "<label class='checkbox-inline'>\n";
if ($name == 'Any'){
$type .= "<input type='checkbox' id='bodyTypeAny' name='bodyTypeCheck[]' value='{$id}'> {$name}\n";
} else {
$type .= "<input type='checkbox' id='' name='bodyTypeCheck[]' value='{$id}'> {$name}\n";
}
$type .= "</label>\n";
//Add body types to array
$bodytype[] = $type;
}
} else {
echo 'Database error';
}
// Close the statement:
$stmt->close();
unset($stmt);
Весь PHP-код для групп флажков: http://pastebin.com/NXN6ZzcK
Как я могу реализовать функцию, которая создавала бы группу флажков, поэтому я бы просто назвал ее функция.
Надеюсь, кто-нибудь сможет мне помочь. Спасибо.
1 answers
Прежде чем выполнять следующие действия, сохраните свою рабочую версию где-нибудь, чтобы убедиться, что вы можете выполнить откат, если вам это необходимо.
Вы могли бы создать класс для шаблонов, например:
class TemplateEngine {
public static function getCheckboxTemplate($input, $templateName) {
$template = "";
foreach ($input as $element) {
$template .= "<label class='checkbox-inline'>\n";
$template .= "<input type='checkbox' ".(($element["name"] === "Any") ? ("id='".$templateName."Any'") : (""))." name='".$templateName."Check' value='".$element["id"]."'>".$element["name"]."\n";
$template .= "</label>\n";
}
return $template;
}
}
Убедитесь, что вы создали этот класс в отдельном файле, где вы также будете реализовывать более поздние шаблоны, и вам потребуется/включить этот файл. И тогда вы можете использовать его следующим образом:
// ---------------------------------------
// --- Populate "Body Type" dropdown list:
// ---------------------------------------
$template = "";
// Select exsiting body type from database:
$prep_stmt = " SELECT id, name FROM body_type";
$stmt = $mysqli->prepare($prep_stmt);
if ($stmt) {
// Bind "$userId" to parameter.
//$stmt->bind_param('i', $userId);
// Execute the prepared query.
$stmt->execute();
$stmt->store_result();
// get variables from result.
$stmt->bind_result($id, $name);
$input = array();
// Fetch all the records:
while ($stmt->fetch()) {
$input[]= array("name" => preg_replace("/[^a-zA-Z0-9_\-]+/", "", $name), "id" => filter_var($id,FILTER_SANITIZE_NUMBER_INT));
}
$template = TemplateEngine::getCheckboxTemplate($input, "bodyType");
} else {
echo 'Database error';
}
// Close the statement:
$stmt->close();
unset($stmt);
И вместо использования $bodytype
array
, вы можете просто:
echo $template;
Код не проверен. Если есть опечатки, дайте мне знать:)
РЕДАКТИРОВАТЬ: Дальнейшее создание шаблонов:
class TemplateEngine {
public static function getCheckboxTemplate($input, $templateName) {
$template = "";
foreach ($input as $element) {
$template .= "<label class='checkbox-inline'>\n";
$template .= "<input type='checkbox' ".(($element["name"] === "Any") ? ("id='".$templateName."Any'") : (""))." name='".$templateName."Check' value='".$element["id"]."'>".$element["name"]."\n";
$template .= "</label>\n";
}
return $template;
}
public static function getCheckboxDatabaseWrapperTemplate($tableName, $templateName, $mysqli) {
$template = "";
// Select exsiting body type from database:
$prep_stmt = " SELECT id, name FROM ".$tableName;
$stmt = $mysqli->prepare($prep_stmt);
if ($stmt) {
// Bind "$userId" to parameter.
//$stmt->bind_param('i', $userId);
// Execute the prepared query.
$stmt->execute();
$stmt->store_result();
// get variables from result.
$stmt->bind_result($id, $name);
$input = array();
// Fetch all the records:
while ($stmt->fetch()) {
$input[]= array("name" => preg_replace("/[^a-zA-Z0-9_\-]+/", "", $name), "id" => filter_var($id,FILTER_SANITIZE_NUMBER_INT));
}
$template = TemplateEngine::getCheckboxTemplate($input, $templateName);
} else {
echo 'Database error';
}
// Close the statement:
$stmt->close();
unset($stmt);
return $template;
}
}