Перейти к публикации

При {include file="<>"} не работает msgbox()


Рекомендованные сообщения

При разработке собственного модуля столкнулся с ситуацией, когда функция msgbox не работает.

Делаешь свой модуль, подключаешь при помощи {include file="<>"}, а msgbox() не работает.

Ссылка на сообщение
Поделиться на других сайтах
  • 12 лет спустя...

Та же проблема.

Похоже с 2012 года никто не нашел решения?

Ссылка на сообщение
Поделиться на других сайтах

@ovpmusic2 Поскольку вызов php скриптов через тег {include} вызывается в функциях compile каждого шаблона то в main.tpl не получится использовать функцию msgbox. Нужно подключать в других шаблонах которые раньше main.tpl создаются.

Ссылка на сообщение
Поделиться на других сайтах

Все она работает. Просто кто то не читает документацию и не смотрит что делает фукнция которую они пытаются выполнить. Итак смотрим документацию https://dle-news.ru/extras/online/index.html?modules_include.html и что там написано что обязательно нужно сделать чтобы вывести информацию из своего модуля уже в шаблоне на месте этого тега. Потом смотрим фукнцию msgbox что она делает? А теперь внимание вопрос: так какую строчку нужно написать в своем модуле после вызова вызова msgbox чтобы увидеть результат? Прямой ответ не даю, подумайте, потому что вы программисты которые пишут свой код, а значит должны думать. Направление куда смотреть я вам дал.

Ссылка на сообщение
Поделиться на других сайтах

Получилось сделать только так:

При подключении в main.tpl таким образом:

[aviable=faq]{include file="engine/modules/mymod.php"}[/aviable]

Создаем файл engine/modules/mymod.php и пишем в своем модуле следующее:

<?php

$error = "Test message";//текст сообщения
$title = "Message Box";//текст заголовка
    
$tpl_2 = new dle_template();

$tpl_2->dir = TEMPLATE_DIR;

$tpl_2->load_template( 'info.tpl' );

$tpl_2->set( '{error}', $error ); //текст для макроса {error}
$tpl_2->set( '{title}', $title ); //текст для макроса {title}

$tpl_2->compile( 'info' );

$tpl_2->clear();

$tpl->result['info'] .= $tpl_2->result['info'];
 
echo $tpl->result['info'];

echo "<p><b>Тестовый модуль</b></p>";

?>

Тогда при обращении к адресу http://site.ru/index.php?do=faq модуль выводит сообщение нормально.

Если всё, что написано до echo записать как функцию, равно как и обращение к стандартной функции msgbox - работать не будет, можете проверять...

Хотя, хотелось бы не дублировать код функции msgbox в своих модулях, а использовать его из файла functions.php.

Но почему-то так не хочет выводить сообщение...

Может у кого-то есть более компактное решение?

Думаю многие будут признательны!

Ссылка на сообщение
Поделиться на других сайтах
26 минут назад, ovpmusic2 сказал:

Получилось сделать только так

Неправильно сделали. Не нужен такой длинный и избыточный код. Достаточно было вызвать msgbox а после вывести echo $tpl->result['info']; Все. И это прекрасно работает.

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, celsoft сказал:

Неправильно сделали. Не нужен такой длинный и избыточный код. Достаточно было вызвать msgbox а после вывести echo $tpl->result['info']; Все. И это прекрасно работает.

Изначально делал именно так как вы и написали. Не работает у меня. Почему пока не понял. Если раскопаю причину - напишу, чтобы другим было проще...

Но всё равно, Спасибо!

Ссылка на сообщение
Поделиться на других сайтах

В общем, чтобы разобраться в проблеме вывода msgbox, установил чистый DLE без дополнительных модулей или хаков и попытался сделать так, как советует уважаемый Celsoft.

Вот видео, в котором видно, что это не работает: https://disk.yandex.ru/i/EBqTiEnDIQsiYg

Так что если у разработчика нет решения, придется использовать избыточный код 😔

Или всё-таки есть решение???

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...