php шаблон для разных страниц с разными css и mysql - PullRequest
0 голосов
/ 24 мая 2011

Привет, я пытаюсь выяснить, как сделать систему шаблонов PHP с классом, мне не нравится header.php footer.php или smarty или что-то еще, просто хочу template.html, class.php и page1 .php, page2.php и т. д.… с моим собственным php-кодом, и я нашел много сайтов, где люди учат, как это делать, но у меня все еще много вопросов.

1) Я хочу добавить ДОПОЛНИТЕЛЬНЫЕ CSS для некоторых страниц

2) НА НЕКОТОРЫХ страницах есть php-код, например запросы mysql, и тому подобное

3) CONTENT, который будет переменной, где я всегда хочу в шаблоне, не только слова, но и большое количество элементов div и прочего, также на некоторых страницах переменная CONTENT имеет запросы внутри, например, fillin a (например, ) выпадающее меню.

Надеюсь, что кто-то может мне в этом помочь, у меня действительно есть шаблон для объяснения (теги просто случайные)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<title>CompanyName | ##TITLE##</title>

<link href="layout.css" rel="stylesheet" type="text/css" />
<link href="styles.css" rel="stylesheet" type="text/css" />
##EXTRA_CSS##
<link rel="shortcut icon" href="/favicon.ico" />

<!--[if IE 6]>
    <script src="DD_belatedPNG_0.0.8a-min.js"></script>
    <script>
            DD_belatedPNG.fix('img, div');
    </script>
<![endif]--> 

##EXTA_JS##

</head>

<body>

    <div id="main">  
        <div id="container_black">
            <div id="container_white">

                <div id="container_header">

                    <div id="logo_top"></div>           
                    <div id="lineas_verticales_top">
                        <div class="volver_portada"><a href="index.shtml">Volver a portada</a></div>
                        <div class="english_spanish"><u>Español</u> | <a href="../en/index.shtml" class="english_spanish">English</a></div>
                    </div>
                    <div id="nav_bar_black"><div id="nav_bar_red"><div id="nav_bar_yel">

                        <ul class="menuholder"> 
                            <li class="menu_principal"><a href="#" title="Principal">Principal</a></li> 
                            <li class="menu_empresa"><a href="#" title="Empresa">Empresa</a></li> 
                            <li class="menu_productos"><a href="#" title="Productos">Productos</a></li> 
                            <li class="menu_clientes"><a href="#" title="Clientes">Clientes</a></li> 
                            <li class="menu_recetas"><a href="#" title="Recetas">Recetas</a></li> 
                            <li class="menu_contacto"><a href="#" title="Contacto">Contacto</a></li> 
                        </ul> 

                    </div></div></div>
                    <div id="topbg_degr"></div>

                </div>

                <div id="container_left">
                    <div id="conmargen_left_top"></div>
                    <div id="container_conmargen_left_middle">

                        ##CONTENT##

                    </div>
                    <div id="conmargen_left_bottom"></div>

                    <!--[IF INDEX]
                    <div id="fono"></div>
                    <div id="dir"></div>
                    -->

                </div>

                <!--[IF INDEX]
                <div id="nav"></div>
                -->

                <div id="container_right">
                    <div id="conmargen_right_top"></div>
                    <div id="container_conmargen_right_middle">

                        <!--[IF PAGE OR PAGE OR PAGE]
                        <a href="#" id="recetas_poster" title="recetas"></a>
                        [ELSE IF]
                        <a href="#" id="clientes_poster" title="recetas"></a>
                        [ELSE IF]
                        <a href="#" id="productos_poster" title="recetas"></a>

                        -->

                    </div>
                    <div id="conmargen_right_bottom"></div>
                </div>

                <!--[IF INDEX]
                <div id="frame_facebook">
                <a href="#" class="facebook" title="CompanyName"><span>CompanyName</span> en Facebook</a>
                <div class="breakL"></div>
                <fb:like href="#" layout="button_count" show_faces="true" width="100" font="tahoma"></fb:like>
                </div>
                -->

                <br/>   

            </div> <!-- cierre del container white -->
        </div> <!-- cierre del container black -->

        <div id="footer">   
                <div class="footer_comment">
                    CompanyName Todos los derechos reservados 2011
                </div>
        </div>

    </div> <!-- cierre del main -->
<br/>

</body>

</html>

например, contact.php, содержимое будет в форме, и в верхней части страницы у меня есть этот огромный код php, где я проверяю и все.

Я был бы очень признателен, если бы кто-нибудь поставил меня на правильный путь для этого. заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 24 мая 2011

Вы можете создать такой быстрый класс (class.php), который будет вашим «механизмом шаблонов»:

class Template {
    var $contents;

    function load($file) {
        if ($fp = fopen($file, "r")) {
            $this->contents = fread($fp, filesize($file));
            fclose($fp);
        }
    }

    function replace($str,$var) {
        $this->contents = str_replace("<".$str.">",$var,$this->contents);
    }

    function show() {
        $search = array(
                '/\t/', //Remove Tabs
                '/<!--[^\[-]+?-->/', //Remove Comments
                '/\n\n/' //Remove empty lines
                );
            $replace = array(
                '',
                '',
                ''
                );
        $this->contents = preg_replace($search, $replace, $this->contents);
        echo $this->contents;
    }
}

В вашем файле template.html добавьте специальные теги, куда вы хотите поместить свойсодержимое, как это:

<html><head></head>
<body>
<div id="id1"><page_title></div>
</body>
</html>

...

Затем создайте функцию для записи внутри тегов (по одному на зону):

function writetitle($s) {
    $GLOBALS['writes']++;
    $GLOBALS['page_title'] .= $s;
    return;
}

наконец, вyour page.php, вызовите класс, напишите свой контент и сгенерируйте страницу:

require_once('class.php');
//Load Class
$template = new Template;
$template->load("template.html");

//Some query :
$query = mysql_query('SELECT...');
$res = mysql_num_rows($query);

//write your content :
writetitle('my title, '.$res.'');

//Generate the page :
$template->show();

Делая это, вы можете создать столько зон, сколько захотите. writetitle действует как echo , так что вы можете делать запросы и все, что хотите.

Надеюсь, это поможет.

0 голосов
/ 24 мая 2011

Вместо того, чтобы PHP разбирал ваши файлы шаблонов, я бы предложил писать шаблоны с использованием PHP, а не вашего собственного псевдокода.

Совершенно верно написать

...
<body>
<?php if($fooBar == "hahahaha"):?>
  <a href="www.foobar.com">The cool foobar link</a>
<?php endif;?>
</body>
...

Я бы тогда создалlayout файл со всеми распространенными html и т. д. Затем с помощью небольших фрагментов шаблона вставьте их в макет, куда направляется основное содержимое.Имея реальный код PHP в ваших шаблонах, PHP-разработчик может их обрабатывать, и вам не нужно писать собственную логику для обработки циклов, операторов if и т. Д.

Посмотрите на Zend Framework, и вы получитехорошая идея о том, как вы можете написать свой шаблонизатор.

0 голосов
/ 24 мая 2011

Существует, вероятно, сто различных способов решения этой проблемы, каждый из которых имеет свои преимущества и недостатки - используя базы данных и / или вызовы ajax и / или верхние и нижние колонтитулы, как вы уже сказали. Вы действительно должны решить, какой способ лучше всего подходит для вашего конкретного проекта или стиля кодирования, или обоих.

Однако - если вы действительно хотите просто 'template.html', но у вас есть несколько страниц с PHP, javascript, MySQL или чем-то еще - тогда я бы предложил.

Создайте template.html с заполнителями, такими как {PAGE_TITLE}, {MAIN_CONTENT} или что вам нужно.

Создайте page1.php / page2.php и т. Д. И выполняйте любую работу на стороне сервера, генерируйте переменные в соответствии с вашими заполнителями. Может быть удобно хранить их в виде массива, например:

PAGE_VARS array( 
                 ['TITLE'] => My Page
                 ['CONTENT'] => This is my page content
               )

В конце скрипта 'page' загрузите все содержимое файла template.html в строку

$template = file_get_contents('template.html')

Затем создайте шаблон с замененными переменными, используя один из основных циклов:

foreach ($PAGE_VARS as $KEY=>$VALUE) {       
   $template = str_replace("{".$KEY."}",$VALUE,$template)
}

(Не стесняйтесь становиться умными и, возможно, более эффективными с некоторыми регулярными выражениями выше, это всего лишь быстрый пример.)

Выведите ваш шаблон.

echo $template;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...