Существуют ли еще ненавязчивые серверные сценарии, такие как hQuery, для упрощения создания шаблонов? - PullRequest
0 голосов
/ 25 октября 2011

Я наткнулся на этот интересный шаблонизатор, который автор называет hQuery, который представляет собой «Ненавязчивый сценарий на стороне сервера». [Больше информации здесь - https://github.com/choonkeat/hquery]. Он построен в Ruby для платформы RoR.

Я хотел знать, доступно ли что-то подобное для других платформ (PHP, Python, Java)


PS: я знаю о шаблонизаторах, таких как smarty и twig. Я ищу что-то ближе к HQuery.

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Не то, что я знаю, но я делал нечто похожее по концепции, хотя и намного более просто, в PHP, используя phpQyery и некоторую пользовательскую html-подобную разметку.

Например, вот упрощенный нестандартный фрагмент html:

<bodynode>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<div class="holder">
    <article>
    <header class="col_12f">
        <component id="logo"></component>
        <component id="address"></component>
        <component id="languages"></component>
        <component id="mainmenu"></component>
    </header>
    <section id="banner">
        <component id="maingallery"></component>

        <component id='sideMenu'></component>
    </section>
    <section class="col6 first" id="intro_title">
        <h1 class="underlined"></h1>
        <section class="col3 first" id="intro_col1"></section>
        <section class="col3 last" id="intro_col2"></section>
    </section>
    <section class="col3" id="location"></section>
    <section class="col3 last" id="services"></section>
    </article>
    <div class="clear"></div>
</div>
<component id="footer"></component>
</bodynode>

Используя phpQuery, который работает на стороне сервера с XML- и HTML-Dom-узлами, способом, очень похожим на jQuery, я сопоставляю все теги с содержимым, полученным из БД, используя их ID в качестве ключа. а также все теги <component></component> с пользовательским выводом из функций. Таким образом, существование <component id="logo"></component> приведет к вызову функции component_logo, используя:

function replaceComponents ($pqInput){
    $pqDoc = phpQuery::newDocument($pqInput);
    $comps = pq('component');
    foreach ($comps as $comp){
        $compFunc = 'component_'.pq($comp)->attr('id');
        pq($comp)->replaceWith($compFunc($comp));
    }
    return $pqDoc;
}

и

function component_logo($comp){
    $pqComp = phpQuery::newDocument(file_get_contents('Templates/Components/logo.component.html'));
    $pqComp->find('a')->attr('href','/'.currentLanguage().'/')->attr('title','Website Title');
    $pqComp->find('img')->attr('src','/Gfx/logo.png');
    return $pqComp;
}

Хотя он не основан на шаблоне MVC и использует прямое процедурное программирование, пока этот метод позволил очень быстро разрабатывать сайты малого и среднего размера, сохраняя при этом все СУХОЕ.

0 голосов
/ 25 октября 2011

Мне не очень нравится использовать другие движки шаблонов, на самом деле, потому что я нахожу их немного тяжеловесными для всего, что я действительно хочу сделать (например, smarty).

Существует школа, которая скажет: PHP уже является движком шаблонов ... зачем создавать шаблоны в шаблонах?

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

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

$params = array("<!--[CONTENT]-->" => "This is some content!");
$path = "htmltemplates/index.html";

$html = implode("",file($path));

foreach($params as $field => $value) {
    $html = str_ireplace($field, $value, $html);
}

echo $html;

Вокруг этого есть немного больше мяса, но это основной код. Считайте файл в массив, взорвитесь, выполните поиск в массиве $ params и замените $ field значением $ value в $ html. Выведите отредактированный $ html.

ваш файл index.html будет выглядеть примерно так:

<html>
<head>
<title>This is a template</title>
</head>
<body>
<div id="page-container">
    <!--[CONTENT]-->
</div>
</body>
</html>

Ваш вывод будет:

<div id="page-container">
    This is some page content!
</div>

Может быть, посмотрите на реализацию своего собственного движка шаблонов! :)

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