Вход • Регистрация

Простой include php-файла с заданными переменными, как сделать?

  • 10 июля 2019 г.
  • Добрый день,
    ранее в статичной версии сайта в начале шаблона у меня обычным include подключался файл settings.php, в котором находились нужные переменные - телефоны, почты, некоторые позиции по стоимости услуг на сайте и т.д. Эти переменные выводил в шаблоне через простое echo/.

    Захотел сделать такое-же средствами шаблонных тегов <insert name="settings">, создал файл settings.php в папке /functions/. Не работает как нужно, например "echo hello world" - работает, а получить в файле, где вызываю этот тег значения переменных не получается.

    Что это, ограничения в самих тегах или я что-то делаю неправильно? Средствами CMS я знаю как это сделать, но хочу сделать таким способом - шаблонным тегом. Обычный include также работает, но может это уже будет неправильным решением?
    • 10 июля 2019 г.
    • insert name="show_include" file="settings"

      и файл blocks/settings
      • 10 июля 2019 г. , редакция: 10 июля 2019 г.
      • Не работает, почему-то. Тест-команды в settings работают, а вывод переменных из него в page_header не работает.
        Этот метод я в самом начале пробовал тоже.
  • 10 июля 2019 г. , редакция: 10 июля 2019 г.
  • Код
    <?php echo $this->diafan->_tpl->htmleditor('<insert name="settings">); ?>

    Но это не точно.
    • 10 июля 2019 г.
    • Уже лучше, работает с константами!)) С переменными не хочет. В коде ошибка, закрывающего апострофа не хватает.
      • 25 июля 2019 г.
      • А если прописать переменные прям в Тег и обрабатывать через $attributes?

        Типа
        <insert name=‘setting’ fieds=‘value’>

        Получаете значение через $attributes[‘fieds’]

        Сорян за кавычки- телефон такие ставит
        • 25 июля 2019 г.
        • Работает! Спасибо.

          <insert name="settings" field="work_time"> - вызываем settings.php из папки functions;

          В самом settings.php после объявления переменных выводим запрашиваемую:

          echo $$attributes["field"];

          • 25 июля 2019 г.
          • Меня не покидает ощущение что по воробью стреляют из пушки :)
            • 25 июля 2019 г.
            • Кстати, это удобнее, чем использовать блоки на сайте и вызывать их по ID, который надо сначала найти.
              Была бы там хотя бы группировка блоков, а если их пару десятков, ковыряться в них затруднительно.
  • 10 июля 2019 г. , редакция: 10 июля 2019 г.
  • Резюмирую:

    Код

    <?php include $_SERVER['DOCUMENT_ROOT'] . "/custom/my/themes/blocks/settings.php";?> - такой способ подключения работает с переменными и константами php


    Другие два способа работают только с константами:

    Код

    <?php echo $this->diafan->_tpl->htmleditor('<insert name="show_include" file="settings">'); ?>

    и

    <?php Custom::inc('/custom/my/themes/blocks/settings.php');?>

    • 10 июля 2019 г.
    • Вообще странно что оно хоть с константами заработало )

      Мне кажется что правильнее через require_once подключать файл с переменными.
      • 10 июля 2019 г.
      • Кстати, да! Будет правильнее:

        Код

        <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/custom/my/themes/blocks/settings.php";?>

        • 11 июля 2019 г.
        • Телефоны и прочее храним в блоках на сайте, потом просто вызываем блок, вдруг вы не в курсе :)
          • 12 июля 2019 г.
          • Да я в курсе, не очень то удобно в некоторых случаях, например когда у тебя сотня переменных для вывода цен в тексте.
  • 12 июля 2019 г.
  • Не работает это решение, если выводить переменную не в том файле шаблона, в котором подключается settings. Ужос.
  • 25 июля 2019 г.
  • Нашел решение, если определить переменную как глобальную - global $abc,
    и выводить потом ее с помощью $GLOBALS["abc"].

    Подскажите, какие минусы могут быть в использовании глобальных переменных?
    • 25 июля 2019 г.
    • В вашем случае точки зрения производительности - никаких минусов.

      С точки зрения сопровождения кода:

      Цитата

      Использование глобальных переменных снижает читабельность, делает код сложным для понимания. Очень сложно определить где, как и с какой целью была проинициализирована глобальная переменная и как правильно ее использовать.
      Код с глобальными переменными сложно сопровождать. При изменении глобальной переменной вы вынуждены просматривать весь код, чтобы внести изменения везде, где используется эта переменная.
      Злоупотребление глобальными переменными может привести к ошибкам, которые очень сложно отлаживать. Без какого-либо механизма контроля за использованием переменной очень просто записать в переменную невалидные данные, которые могут привести к ошибкам в других частях кода (например, если в одной части кода переменная заполняется массивом, а в другой части кода в этой переменной ожидается объект).
      Можно забыть объявить переменную глобальной и работать с локальной переменной, не замечая этого, до тех пор пока приложение не сломается. Такие ошибки сложно отлаживать.
      Если вы совмещаете свой код с чужим (например при использовании стороних библиотек или при написании расширений для другого ПО) и обе системы используют глобальные переменные, существует вероятность того, что названия переменных могут совпасть. Это становится причиной возникновения ошибок в обеих системах, которые сложно отлавливать.
      Все части кода, использующие одну глобальную переменную, сильно связаны между собой. Разделить сильно связанный код очень сложно. Это затрудняет его повторное использование.
      Написание юнит-тестов становится более сложным, поскольку тесту не известно, какие глобальные переменные нужны и как проинициализировать все глобальные переменные валидными значениями.

Новости

  • 24 апреля, среда
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 
  • 15 декабря 2023 г.
  • Подводим итоги 2023 года. Выпустили новую сборку DIAFAN.CMS 7.1.1, вводим новые тарифы на аренду сайта и коммерческую поддержку и автообновления с января 2024 г., строим планы на будущий год.