我是Drupal和PHP的新手。我正在尝试创建一个模块,当激活时创建一个页面,然后创建一个块,配置块只显示在创建的页面上,然后显示一个包含的PHP文件。包含的PHP文件用于访问非现场数据库。
我已设法对模块进行编码以创建页面,并创建块。但以下是我的问题。
在hook_block_view中,对于内容我输入了一个函数名,下面我定义了包含testpage.inc的函数。该页面加载但内容未加载到块的指定区域中。如果我只输入内容的文本,它在该区域加载没问题。
当我将include定义为输出值时,该块会加载文件路径,并且包含的文件会加载到块外的页面顶部。
包含的文件是一个PHP文件,用于访问非现场Web服务以显示公司的库存。
<?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; }
答案 0 :(得分:0)
你没有提供inc文件的内容,但我很确定它输出(echo / print)data / html并且它不应该因为最后一个函数应该返回输出。
所以你可以在你的inc文件中有一个函数返回一些html然后从你的上一个函数调用它来填充$ output。
答案 1 :(得分:0)
正确,inc文件确实包含了Echo。当我包含一个函数inc文件并为Output调用该函数时,inc文件被加载到块中。我发现原因是Drupal使用Output Buffering,它在将所有标记发送到浏览器之前编译它。我试图包含的文件不是输出缓冲区友好的。