+117.90
Рейтинг
299.07
Сила

Вадим

Конфигурационные переменные и шаблоны Smarty

Возникла такая потребность: использовать в шаблонах значения собственных переменных, которые я задаю в кофиге. Но список переменных и констант, которые передаются в Смарти жестко задан. Можно, конечно, самому править класс Viewer, но это плохой путь — при каждом обновлении версии придется снова и снова лезть руками в системный класс.

Поэтому предлагаю разработчикам следующее: определить глобальную переменную-массив (например, $aCustomVar), и ее скармливать шаблонизатору. Тогда в папку, скажем, /config/modules/custom можно положить config.php, который будет подключаться автоматически, а в нем задаем этот самый массив:
$aCustomVar['element1']='bla bla bla';
$aCustomVar['element2']='custom string';


И тогда в своем шаблоне (.tpl) я могу использовать эти переменные:
<div>Элемент 1: {$aCustomVar.element1}</div>
<div>Элемент 2: {$aCustomVar.element2}</div>

Авторизация, интеграция и прочие прелести

Я уже писал (и не только я), что иногда возникает желание к уже работающему сайту прикрутить социалку. Если речь идет о форуме или еще каком-то ресурсе, где уже есть регистрация, авторизация, то это отдельный разговор, как такое замутить. Но может быть и так, что возникает желание прикрутит ЛС к сайту, где регистрации не было, либо она была примитивной и ею можно пожертвовать. В таком случае разумней использовать систему регистрации/авторизации из ЛС. Немного поковырялся в коде, и вот что накопал (если что навру, пусть меня гуру поправят).

При входе в ЛС в куках создается переменная с именем 'key'. Поэтому из стороннего PHP-кода можно проверять, существует ли $_COOKIE['key']. И если есть, то всю инфу о юзере можно получить из базы из таблицы 'prefix_user' примерно так:


SELECT * FROM prefix_user WHERE user_key='{$_COOKIE['key']}'


В примере кода ниже никакого запроса нет, просто выводится ключ, если он есть:

<?
if (isset($_COOKIE['key'])) {
?>
  User Key: <?=$_COOKIE['key'];?> | <a href="/community/login/exit/">Выйти</a>
<?
} else {
?>
<form action="/community/login/" method="POST">
  <h3>Авторизация</h3>
  <label for="login">Логин или e-mail</label>
  <input type="text" class="input-text" name="login" id="login-input" /><br />

  <label for="password">Пароль</label> 
  <input type="password" name="password" class="input-text" /><br />

  <label for="" class="input-checkbox">
  <input type="checkbox" name="remember" checked />Запомнить меня</label><br />

  <input type="hidden" name="submit_login">
  <button type="submit" ">Войти</button>
</form>
<?
}
?>

PS Показан пример для варианта, когда ЛС живет не в корне, а в папке community

PPS ВНИМАНИЕ! SQL-запрос приводится в качестве очень упрощенного примера! Непосредственное его использование на рабочем сайте может создать угрозу безопасности! Как верно замечено комментаторами ниже, нельзя совать в запрос, что попало без тщательной проверки!

UPD Вышесказанное действительно, если при входе юзера стоит галка «Запомнить меня» и мы хотим воспользоваться этой опцией. А вообще надо проверять сессионную переменную 'user_id' (и в prefix_user можно найти запись по соотвествующему полю).