В Drupal 7 включите php файл в блоке из пользовательского модуля

Я новичок в Drupal и PHP. Я пытаюсь создать модуль, который при активации создает страницу, затем создает блок, настраивает блок на показ только на созданной странице, а затем отображает включенный файл PHP. Включенный PHP-файл предназначен для доступа к базе данных вне сайта.

Мне удалось закодировать модуль для создания страницы и создания блока. Но вот моя проблема.

В hook_block_view для содержимого я ввел имя функции, ниже я определил функцию для включения testpage.inc. эта страница загружается, но содержимое не загружается в указанной области блока. Если я просто ввожу текст для контента, он загружается в регионе без проблем.

Когда я определяю включение как выходное значение, блок загружает путь к файлу, а включаемый файл загружается вверху страницы за пределами блока.

Включенный файл — это файл PHP, который обращается к стороннему веб-сервису для отображения инвентаря компании.

<?php

//////////////////////////////////////////////////////////////////
/** using hook_menu to create a page for the module - hook_menu**/
/////////////////////////////////////////////////////////////////
function sps_webconnect_menu() {
$items['products']=array(
'title' => 'Products',
'type' => MENU_NORMAL_ITEM,
'page callback' => 'sps_webconnect_products',
'access callback' => TRUE,
);
return $items;
}

/** This function defines the page callback from above**/
function sps_webconnect_products() {
return "&nbsp";
}

////////////////////////////////////////////////////////////////
/** Creates and Defines Block - hook_block_info**/
////////////////////////////////////////////////////////////////
function sps_webconnect_block_info() {
$blocks['sps_webconnect_block'] = array(
'info' => t('Products Page - SPS Web Connect'),
'cache' => DRUPAL_NO_CACHE,
'status' => TRUE,
'region' => 'content',
'visibility' => BLOCK_VISIBILITY_LISTED,
'pages' => 'products',
);
return $blocks;
}//////////////////////////////////////////////////////////////////////
/* This function defines the content of the block - hook_block_view */
/////////////////////////////////////////////////////////////////////
function sps_webconnect_block_view($delta = '') {
$block = array();

switch ($delta) {
case 'sps_webconnect_block':
$block['subject'] = t('SPS Product Page');
$block['content'] = sps_webconnect_file();
break;
}
return $block;
}function sps_webconnect_file(){
$output = '';
module_load_include('inc', 'sps_webconnect', 'testpage');
return $output;
}

0

Решение

Вы не предоставили содержимое inc-файла, но я уверен, что он выводит (echo / print) data / html, и не должен, поскольку последняя функция должна возвращать вывод.

Таким образом, у вас может быть функция внутри вашего inc-файла, которая возвращает html, а затем вызывает ее из вашей последней функции для заполнения $ output.

0

Другие решения

Правильно, в Inc File действительно есть Echo. Когда я включил функцию inc-файл и вызвал эту функцию для вывода, inc-файл был загружен в блок. Я обнаружил, что причина этого в том, что Drupal использует буферизацию вывода, которая компилирует всю разметку перед отправкой в ​​браузер. Файл, который я пытался включить, не подходит для буфера вывода.

0

По вопросам рекламы [email protected]