За последние 24 часа нас посетили 22834 программиста и 1259 роботов. Сейчас ищут 718 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем redcap, 25 дек 2016.

  1. redcap

    redcap Новичок

    С нами с:
    16 ноя 2016
    Сообщения:
    21
    Симпатии:
    1
    Здравствуйте! Можете подсказать, как реализовать подстановку значений, полученных из формы, в шаблон?
    Тот код, который есть сейчас:
    PHP:
    1. <?php //создание виртуального хоста Apache
    2. if (isset ($_POST['create'])) {  
    3. //получаем необходимые данные из полей формы  
    4. $cname = $_POST['cname'];  
    5. $calias = $_POST['calias'];  
    6. $cemail = $_POST['cemail'];  
    7. $ccharset = $_POST['ccharset'];  
    8. $cindexfiles = $_POST['cindexfiles'];      
    9. //получаем шаблон из файла
    10. $config = file_get_contents ('/***/templates/apachevhost.tpl') or die ('Невозможно получить доступ к файлу');
    11.   //путь к новому шаблону
    12.   $path = "/etc/apache2/sites-available/$cname.conf";  
    13. $pathtosave = "/***/panel/$cname.conf";  
    14. //записываем наш новый виртуальный хост в файл
    15. ...
    16. //Выводим получившийся конфигурационный файл и данные из формы (для отладки)
    17. echo $config;
    18. echo "<br> Имя сайта: $cname";  
    19. echo "<br> Алиасы сайта: $calias";
    20.   echo "<br> Email администратора сайта: $cemail";
    21.   //затем активируем виртуальный хост и перезагружаем веб-сервер
    22. ...
    23. } ?>
    Шаблон (apachevhost.tpl):
    Код (Text):
    1.  
    2. <VirtualHost 127.0.0.1:80>
    3.     ServerName $cname
    4.     ServerAlias $calias
    5.     DocumentRoot /home/$login/www/$cname
    6.     DirectoryIndex $cindexfiles
    7.     ServerAdmin $cemail
    8.     AddDefaultCharset $ccharset
    9.     AssignUserID $login $login
    10.     CustomLog /home/$login/logs/$cname.access.log combined
    11.     ErrorLog/home/$login/logs/$cname.error.log
    12.      <Directory /home/$login/www/$cname>
    13.     Require all granted
    14.     </Directory>
    15.     </VirtualHost>
    Что не устраивает в текущем коде:
    значения не подставляются, форма работает, при любых значениях переменных шаблон остаётся таким же (а переменные печатаются "как есть" - т.е. в выводе $config вижу
    ServerName $cname
    ServerAlias $calias

    и.т.д.
    Создаётся ощущение, что результат работы функции file_get_contents "заключён в одинарные кавычки" для PHP (если так можно выразиться)
     
  2. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    В tpl, на сколько мне известно, обычные переменные не работают. Каждый шаблон нужно обрабатывать (Например как в DLE). Получаешь полную строку всего шаблона, и с помощью str_replace() заменяешь плейсхолдеры на свои переменные.
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    @redcap функция file_get_contents() не запускает извлеченные данные. Поэтому они выводятся как есть. Для подстановки переменных, следует использовать функцию include() вместо file_get_contents() и превратить шаблон в корректных php-код, то есть писать так:

    Код (Text):
    1. ServerName <?=$cname?>
    2. ServerAlias <?=$calias?>
    3. и т.д.
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Получить готовый конфиг в переменную можно с помощью буферизации
    Код (Text):
    1. ob_start();
    2. include('apachevhost.tpl');
    3. $config = ob_get_clean();