Здравствуйте!
Подскажите, как верстальщику, у которого в целях безопасности отключен php и доступен только Full HTML, подкючать файл с php-скриптом?
Пробовал так:
1. Скрипт в виде:
<?php
тело скрипта
?>
сохранял в файл script.html
2.Пробовал его подключить в ноде:
Что-то не заработало ((
Как быть?
Для ясности: я админ, верстальщику php давать не хочу, но на некооторые страницы он должен как-то подключать готовые скрипты.
Есть решение?
Спасибо!
Комментарии
Код в первом сообщении не вставился.
Добавлял в ноду так:
PHP из тела ноды, запускается с помощью eval, пока не включён php фильтр, не выполнится никакой код.
SSI с помощью которого вы хотите вставить скрипт, должен обрабатывать веб сервер, и обработка происходит уже после формирования страницы, непосредственно перед отдачей клиенту. Если у вас будет-таки настроен SSI, то клиенту придёт не результат работы скрипта, а его содержимое.
Проще всего конечно дать права.
Но лучше, сделать так, чтобы ему не надо было бы вообще делать какие-то php вставки.
Если делать правильно, всё прекрасно решается модулями, если что-то не решается, надо написать соответствующий модуль.
А разные куски php распиханные по материалам это практически гарантировано лишние дыры, и жутко неуправляемая/не поддерживаемая система.
Имею как раз сейчас печальный опыт борьбы с сайтом, в котором масса php в контенте нодов, в content_templates, views и.т.п. Вместо пары модулей и нескольких preprocess функций в теме. И это АД. Что-то найти и изменить часы вместо минут.
В Друпале я новичок, и у меня как раз куча нод с запихнутым внутрь php.
Было ощущение, что что-то не так. Но как исправить, не понял пока.
У меня на сайте сотня статей и 3 вида калькуляторов (как раз на php), один из которых нужно вставлять в зависимости от содержимого статьи.
Как решить эту задачу красиво с помощью модулей? И чтобы безопасно доверить это постороннему верстальщику.
Я думал сделать это с помощью блоков, но возникли проблемы:
1. Если я вставляю блок с калькулятором после содержимого, то он отображается после комментариев, а нужно ДО комментариев, сразу после текста.
2. В настройках блока нужно перечислять все страницы, где этот блок включен. И если вдруг нерадивый верстальщик ошибется, то разом может снести блок со всех страниц.
Куда копать, подскажите.
1. Создай регион в нужном месте ноды и туда впихни блок.
Создать типы материалов по количеству разных калькуляторов.
В самом простом случае создать отдельные шаблоны для этих типов материалов, и выводить счётчик там в нужном месте.
Более правильно, использовать preprocess_node, добавлять код в контент по условию == тип материала.
Ещё более правильно, сделать модуль, который будет это делать, т.е. смотреть тип материала и добавлять в контент тот или иной калькулятор.
Все понял, спасибо!
Начну, пожалуй, с простого.
Взялся за preprocess_node.
Вот так работает:
<?phpfunction THEMENAME_preprocess_node(&$vars) {
if ($vars['page']) {
$vars['content']['mycontent'] = array(
'#markup' => 'My node content',
'#weight' => 10,
);
}?>
А вот так нет:
<?php
if ($vars['page']) {
$vars['content']['mycontent'] = array(
'#markup' => '<?php echo"!"; ?>',
'#weight' => 10,
);
}?>
1. Как же мне все-таки вставить php-код?
2. И как определить тип материала?
$node = $vars['node'];
if($node->type=='mytype') {
// тут делаем нужное
// чтобы понять, что делать например можно воспользоваться функцией модуля devel и посмотреть, что есть в $vars:
dpm($vars);
// Можно добавить свою переменную для вывода в шаблоне
$vars['myvar']='Мы можем получить это значение в шаблоне и вывести его например print $myvar;';
$vars['my2ndvar'] = date("d.m.Y"); // вот ваш воображаемый php код.
}
Так понятнее?
Вам не код надо вставить на страницу, а тут его выполнить и вставить результат.
Да, так понятнее, спасибо
Но проблема в том, что мой php-код - это вывод формы через API форм,
т.е. состоит из функций:
function myform($form_state, &$form_state)
function myform_validate($form, &$form_state)
и генерации формы:
print drupal_render(drupal_get_form('myform'));
Поэтому я не могу запихать рузультаты работы этого кода в одну переменную, чтобы потом ее вывести.
Более того, если помещаю свою функцию (например, function myform) в template.php, то сайт прекращает работать.
Как быть?