Как PHP и JS могут совместно использовать шаблоны HTML? - PullRequest
1 голос
/ 18 февраля 2012

Заявка

В PHP я выведу некоторые начальные представления, чтобы сканеры веб-страниц могли очистить мой сайт:

 ----------------
| cool view 1    |
 ----------------
| cool view 2    |
 ----------------
| cool view 3    |
 ----------------
| Load more      |
 ----------------

Javascript также должен динамически генерировать те же представления. Когда пользователь нажимает кнопку «загрузить еще», он выполняет AJAX на сервере и прикрепляет результат к странице:

 ----------------
| cool view 1    |
 ----------------
| cool view 2    |
 ----------------
| cool view 3    |
 ----------------
| cool view 4    |
 ----------------
| cool view 5    |
 ----------------
| cool view 6    |
 ----------------
| Load more      |
 ----------------

Текущая реализация

В настоящее время мои представления PHP и представления JS написаны отдельно. Вот пример загрузки гипотетического представления PHP с использованием CodeIgniter framework.

view.php

<?php
<div>
    <span>cool view</span>
    <span><?=$id?></span>
</div>
?>

controller.php

$this->load->view(
    'view', 
    array('id' => '999')
);

А вот пример AJAX для загрузки гипотетических представлений с помощью Prototype framework.

ajax.php

echo json_encode(
    array('id' => random())
);

view.js

MyView = Class.create({
    initialize: function(id) {
        var div = new Element('div');
        var span0 = new Element('span').update('cool view');
        var span1 = new Element('span').update(id);
        div.appendChild(span0);
        div.appendChild(span1); 
        return div;
    }
});

controller.js

new Ajax.Request(
    '/index.php/someController/someMethod', {
        onSuccess: function(transport) {
            var response = transport.responseText.evalJSON();
            $('viewsContainer').appendChild(
                new MyView(response.id)
            )
        }
    }
);

Нужен более чистый раствор

Мне нужен способ поделиться шаблоном HTML в PHP и JS без переписывания всего. В моем реальном проекте у меня десятки просмотров. Дублирование кода представления в PHP и JS, кажется, трудно поддерживать. Я не пошел с дешевым маршрутом PHP, печатающим прямой HTML в AJAX, потому что 1) есть дополнительные издержки по размеру для включения тегов HTML, 2) это не зависит от клиента - то есть клиент без браузера не сможет понять вывод и 3) он не позволяет JS аккуратно присоединять слушателей к подпредставлениям в представлении.

Ответы [ 2 ]

0 голосов
/ 12 июля 2013

Не думаю, что тебе это нужно по-старому. Почему бы не использовать шаблонизатор, такой как усы 1 ? Таким образом, у вас не будет больших накладных расходов на HTML, и вы все равно сможете посылать тонкий JSON, который содержит только идентификатор (10 против 50 символов и ваш случай, который даже не учитывает разметку).

0 голосов
/ 18 февраля 2012

Вы можете предоставить окончательный HTML, прямо в браузер:

if(<request is from ajax>)
   echo $this->load->view('view', array('id' => '999'), false);

последний параметр false загружает представление в переменную, в этом случае возвращает его ...

затем, на стороне javascript, вы просто создадите новый div и установите для innerHTML значение response.text

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