Прежде чем перейти к конкретной проблеме, рассмотрите следующую общую проблему: Вы используете шаблоны на стороне сервера (например, Smarty) для генерации страницы определенным образом в зависимости от конкретного состояния. Тем не менее, вы также можете изменить состояние и динамически обновлять эту страницу, используя Javascript. Как вы создаете такую систему, которая не требует репликации своей работы как в Javascript, так и в PHP?
Теперь по конкретному вопросу, который относится к вышесказанному. У меня есть панель навигации для образовательного сайта. В зависимости от URL-адреса, предоставленного пользователем, вы можете находиться на разных уровнях навигации: поле, тема, курс, раздел, урок. Например, если пользователь получает доступ к следующему index.php?field=Social_Sciences
, следующий PHP будет возвращен и проанализирован PHP и отправлен в Smarty, так что соответствующие субъекты будут перечислены:
<subjects>
<subject>
<id>81</id>
<name>Sociology</name>
<description>Sociology</description>
<path>/data/material/Social_Sciences/Sociology/</path>
</subject>
<subject>
<id>82</id>
<name>Economics</name>
<description>Economics</description>
<path>/data/material/Social_Sciences/Economics/</path>
</subject>
</subject>
Аналогичным образом, если пользователь перейдет на index.php?field=Social_Sciences&subject=Economics
, PHP проанализирует следующее и отправит его в Smarty:
<courses>
<course>
<id>65</id>
<name>Introduction to Microeconomics</name>
<description>Introduction to Microeconomics</description>
<path>
/data/material/Social_Sciences/EconomicsIntroduction_to_Microeconomics/
</path>
</course>
<course>
<id>66</id>
<name>Introduction to Macroeconomics</name>
<description>Introduction to Macroeconomics</description>
<path>
/data/material/Social_Sciences/EconomicsIntroduction_to_Macroeconomics/
</path>
</course>
</courses>
Теперь проблема в том, что пользователь также может динамически перемещаться с использованием AJAX, то есть он может щелкать по навигации, не перезагружая страницу. Это означает, что навигационный XML затем должен быть проанализирован jQuery, что означает, что мне нужно написать один и тот же код для синтаксического анализа XML дважды - один раз в PHP и один раз в Javascript. После того, как эта система оказалась громоздкой, я начал использовать AJAX только при начальной загрузке, но это неоптимально с точки зрения скорости и количества запросов. (Если вы считаете, что это тривиально, в моем коде есть другие примеры таких проблем.) Как можно продолжать использовать шаблоны PHP и динамическое обновление AJAX, не переписывая один и тот же код синтаксического анализа дважды на обоих языках?