Использование классов в узлах
Мне нужно немного указаний, я создал собственный класс и пытаюсь использовать его в узле, но, конечно, он бросает на меня белый экран. Поэтому мой вопрос в том, как я могу использовать пользовательский класс для d7, чтобы я мог включить тег в свой узел с помощью php.
Я поместил этот код в template.tpl.php файл и попытался использовать его в моем узле, но затем он выдал белый экран.
<?php class Colors {
public function red_form() {
echo 'color red is here';
}
public function blue_form() {
echo 'color blue is here';
}
public function green_form() {
echo 'color green is here';
}
public function purple_form() {
echo 'color purple is here';
}
public function yellow_form() {
echo 'color yellow is here';
}
}
$colorforms = new Colors();
?>
И я использую это в узле.
Text here here and here.
<?php $colorforms->red_form(); ?>
More text here here and here.
Вывод, который я пытаюсь получить, используя приведенный выше код.
Text here here and here.
color red is here
More text here here and here
Есть ли для этого модуль или что-то в этом роде? или что-нибудь в этом роде, я немного в неведении по этому поводу.
2 answers
Быстрое исправление: объявите класс в template.php но создайте его в своем шаблоне узла (если вы проверите свой журнал ошибок php, у вас, вероятно, было что-то вроде "Вызов функции-члена red_form() для не-объекта в..." в нем). Кроме того, я предполагаю, что это опечатка, что у вас были $colorforms и $color_form в приведенном выше примере.
Не создавайте экземпляры классов (или не выполняйте никакой бизнес-логики) в своих файлах .tpl.php
: содержимое файлов шаблонов должно быть в окончательной, доступной для визуализации форме.
Вместо этого используйте функцию предварительной обработки в template.php
:
// Replace MYTHEME with your theme's short name
function MYTHEME_preprocess_node(&$variables) {
$variables['colorforms'] = new Color();
}
Затем, в node.tpl.php
, ссылка $colorforms
1:
<?php $colorforms->red_form(); ?>
В качестве отступления рассмотрите возможность разделения вашего класса на отдельный модуль: это позволит вам воспользоваться загрузчиком Drupal. Создайте пользовательский модуль, поместите класс в отдельном файле в каталоге модуля (скажем, includes/color.php
).
В файле пользовательского модуля .info
добавьте следующую строку:
files[] = includes/color.php
Если вы просто хотите воспользоваться загрузчиком и вам не нужны никакие другие пользовательские функции, просто используйте файл-заполнитель .module
:
<?php
/**
* @file
* This file is a placeholder.
*/
Примечание 1: Также подумайте о том, чтобы не echo
выводить информацию в своем классе, а возвращать строку, чтобы другие могли решить, как отображать вывод:
public function red_form() {
return 'color red is here';
}
И, предполагая, что вы использовали упомянутое здесь решение, используйте это в node.tpl.php
:
<?php print $colorforms->red_form(); ?>