在Drupal 7中包含一个来自自定义模块的php文件

时间:2014-10-23 16:55:25

标签: drupal-7 drupal-modules php-include drupal-hooks

我是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 "&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;
}

2 个答案:

答案 0 :(得分:0)

你没有提供inc文件的内容,但我很确定它输出(echo / print)data / html并且它不应该因为最后一个函数应该返回输出。

所以你可以在你的inc文件中有一个函数返回一些html然后从你的上一个函数调用它来填充$ output。

答案 1 :(得分:0)

正确,inc文件确实包含了Echo。当我包含一个函数inc文件并为Output调用该函数时,inc文件被加载到块中。我发现原因是Drupal使用Output Buffering,它在将所有标记发送到浏览器之前编译它。我试图包含的文件不是输出缓冲区友好的。