Переменные в документе Nano-CMS.

Как правильно использовать переменные в документе?

Обратите внимание, что шаблон документа Наны в недрах файла редактора ./data/content/admin/editor.php задан вот таким образом:

   $_s['template']['new_document']='

<?php /* Выше этой строки в файле ничего не должно быть */

   $_s['
title']='Тайтл документа.';
   $_s['
content']='

<h2>Заголовок документа</h2>

   <
p>HTML код документа в соответствующих тегах.</p>

   
';

/* Ниже этой строки в файле ничего не должно быть. */ ?>'
;

Абстрагируемся от второстепенных мелочей этого шаблона.
Контент документа в нём определяется по сути дела так:

   $_s['content']='Тут произвольный HTML код.';

В принципе, нам всё равно, в одинарные или двойные кавычки заключать HTML код документа при приравнивании его глобальной переменной. Разработчиком выбраны одинарные кавычки, так как атрибуты HTML тегов (которые будут в тексте документа) обычно заключаются в двойные кавычки, а потому не возникнет никаких коллизий.

Однако в случае, когда Вебмастер работает не с голым HTML, а использует в нём PHP переменные, возникают нюансы.

Например, в файле настроек (который общий для абсолютно любых документов, а потому идеально нам подходит) Вебмастер определил переменную $banner с какой-то рекламой в ней, и теперь хочет иметь возможность вставлять эту рекламу в любое место своих документов простым упоминанием этой переменной. Иллюстрирующий фрагмент:

   $_s['content']='
   
   <h2>Заголовок.</h2>
   <p>Абзац документа.</p>
   $banner
   <p>Абзац документа.</p>
   
'
;

Сделав так, Вебмастер увидит в документе не рекламный блок, а имя переменной с рекламным блоком. Почему?

В PHP принято, что содержимое строковых констант, окаймлённых одинарными кавычками, не воспринимается в качестве носителя PHP кода. Интерпретатор даже не смотрит, есть там переменные, или нет.

Чтобы обойти этот момент, надо вынести переменную за пределы одинарных кавычек. Самым элементарным образом, разбив строковую константу на две, и заключив между ними переменную. Что сложно звучит, но просто выглядит:

   $_s['content']='
   
   <h2>Заголовок.</h2>
   <p>Абзац документа.</p>
   '
.$banner.'
   <p>Абзац документа.</p>
'
;

Обратите внимание, что даже простейший подсвечивальщик PHP кода понял, что эта переменная теперь видима для интерпретатора PHP, и имя переменной выделено цветом. Переменная больше не является простым текстом, как на предыдущей врезке кода, где текст по цвету не отличается от переменной.

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

   $_s['content']=<<<content
   
   <h2>Заголовок.</h2>
   <p>Абзац документа.</p>
   $banner
   <p>Абзац документа.</p>
   
content;

Если код вызывает ошибку при использовании на Вашем сайте, кликните, чтобы узнать причину.

Тут значение переменной будет подставляться в документ при простом её упоминании в коде. Оно было бы и лучше, чем предыдущий вариант с кавычками, за одним ограничением - в данной конструкции понимаются только простые переменные, не являющиеся массивами. А с простыми переменными мало кто работает, так что данное решение далеко не универсально.

Простейший подсвечивальщик кода даже слегка растерялся, и, не зная тип переменной, не решился эту переменную подсвечивать как безусловно исполняемую.

Но, если Вас удовлетворяет такое решение, то пользуйтесь им.