Я писал сайт в php последние несколько недель, и у меня всегда был вопрос. На моем index.php я направляю все файлы шаблонов, подобные этому
if(isset($_GET['search'])){ include_once 'template/template.search.php'; } elseif(isset($_GET['newsletter'])){ include_once 'template/template.newsletter.php'; } elseif(isset($_GET['product'])){ include_once 'template/template.product.php'; } elseif(isset($_GET['categories'])){ include_once 'template/template.categorie.php'; } elseif(isset($_GET['about'])){ include_once 'template/template.about.php'; } elseif(isset($_GET['sitemap'])){ include_once 'template/template.sitemap.php'; } else { include_once 'template/template.index.php'; }
Но для меня это не очень чисто. Есть ли лучшая возможность справиться с такой работой?
Я уже пробовал это так, но не работал для меня
$i = 0 ; switch($i){ case(isset($_GET['search'])): include_once 'template/template.search.php'; break; default: include_once 'template/template.index.php'; break; }
Изменить: лучше писать в заголовке было немного вводить в заблуждение некоторых из вас, поэтому я ищу наилучшую производительность.
Это не слишком чище, но для этого лучше всего использовать коммутатор . Читаемость на 15 000% выше.
switch(true) { case isset($_GET['search']): include_once 'template/template.search.php'; break; // do more default: include_once 'template/template.index.php'; break; }
Как насчет этого?
$templates = array('search', 'newsletter', 'product', 'categories', 'about', 'sitemap', 'index'); foreach ($templates as $template) { if (isset($_GET[$template])) { include_once "template/template.$template.php"; break; } }
Вы действительно должны указать массив правильных шаблонов – это намного безопаснее.
Я предполагаю, что альтернативой является поиск по-другому:
$templates = array('search', 'newsletter', 'product', 'categories', 'about', 'sitemap', 'index'); foreach ($_GET as $key => $val) { if (in_array($key, $templates)) { include_once "template/template.$key.php"; break; } }
Предполагая, что $_GET
содержит только те $_GET
функции, которые вы можете сделать:
foreach ($_GET as $key => $val){ if(isset($key)){ include_once 'template/template.'.$val.'.php'; break; } }
Всего несколько мимолетных мыслей …
if
s sout else
будет выполнена в течение нескольких микросекунд. Тем не менее, важна надежность и надежность кода.
Я считаю, что немного хакерское использование переключателя несколько неудовлетворительное или даже опасное, потому что
На самом деле, интерфейс немного странный. Передача единственной «целевой» переменной, которая будет перечислять возможные страницы, кажется более последовательной для меня. Это устранит нечетные случаи, когда два флажка выбора страницы будут установлены одновременно.
Затем вы можете иметь простой список целей и либо вычислять имя целевых страниц, либо хранить их в массиве-ассоциированных (если вы действительно не можете назвать их согласованным образом, хотя мне интересно, какое странное требование может помешать вам делая это).
Ключевыми моментами, которые я хотел бы рассмотреть для обеспечения надежности, являются:
По всем этим причинам я бы изменил способ выбора страницы, например:
$pages = array ( // single data source "search", "newsletter", // etc... ); @$page = $pages=[$_GET["page"]]; // single page selector if (!$page) $page = "index"; // explicit default case include "template/template.$page.php"; // no reason to include only once // if someone else happens to include the template, better have the page // break down immediately and correct the problem than letting a piece of // buggy code live happily somewhere in your scripts
Вы можете использовать массив: если вы найдете ключ внутри, используйте его, иначе просто используйте значение по умолчанию:
<?php $tpl = array( 'search' => 'template/template.search.php', 'newsletter' => 'template/template.newsletter.php', 'product' => 'template/template.product.php' #... ); foreach($_GET as $get){ if(array_key_exists($get, $tpl)) include_once($tpl[$get]); // assuming search is within $get } ?>
Вы можете использовать переменную (например, t) в строке запроса, чтобы указать шаблон, который вы хотите использовать, а затем просто включить имя шаблона динамически на основе этого. Поэтому, если ваш URL-адрес выглядит примерно так: mysite.com/page.php?t=newsletter&blah=1 & …, тогда все, что вам нужно сделать, это:
include_once('template/template.' . $_GET['t'] . '.php');