Я новичок в 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 " "; } //////////////////////////////////////////////////////////////// /** 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; }
Вы не предоставили содержимое inc-файла, но я уверен, что он выводит (echo / print) data / html, и не должен, поскольку последняя функция должна возвращать вывод.
Таким образом, у вас может быть функция внутри вашего inc-файла, которая возвращает html, а затем вызывает ее из вашей последней функции для заполнения $ output.
Правильно, в Inc File действительно есть Echo. Когда я включил функцию inc-файл и вызвал эту функцию для вывода, inc-файл был загружен в блок. Я обнаружил, что причина этого в том, что Drupal использует буферизацию вывода, которая компилирует всю разметку перед отправкой в браузер. Файл, который я пытался включить, не подходит для буфера вывода.