1

Drupal 用のモジュールを開発しようとしていますが、まったくの初心者です。

インクルードされたファイルを除いて、次のコードはうまく機能しています。インクルードされたファイルの内容はテンプレートの外側に表示されていますが、残りはテンプレートの内側に正しく表示されています。なぜこれが起こり、どのように解決するのですか?

    drupal_add_css(drupal_get_path('module', 'helloworld') . '/helloworld.css', array('group' => CSS_DEFAULT, 'every_page' => TRUE));

function helloworld_menu(){
  $items = array();

  $items['helloworld'] = array(
    'title'            => t('Hello world'),
    'page callback'    => 'helloworld_output',
    'access arguments' => array('access content'),
  );

  return $items;
}

function helloworld_display(){

    include_once ( dirname(__FILE__) . '/helloworld.display.php');
}
/*
* Display output
*/
function helloworld_output() {
  header('Content-type: text/plain; charset=UTF-8');
  header('Content-Disposition: inline');
  $output = "<div id='hw_wrapper'>";
  $output .= helloworld_display();
  $output .= 'hej';
  $output .= "</div>";
  return $output;
}
4

2 に答える 2

0

むしろ次のコードを使用したいと思います。

function helloworld_init() {
  drupal_add_css(drupal_get_path('module', 'helloworld') . '/helloworld.css', array('group' => CSS_DEFAULT, 'every_page' => TRUE));
}

function helloworld_menu(){
  $items = array();

  $items['helloworld'] = array(
    'title' => t('Hello world'),
    'page callback' => 'helloworld_output',
    'access arguments' => array('access content'),
  );

  return $items;
}

/*
* Display output
*/
function helloworld_output() {
  drupal_add_http_header('Content-type', 'text/plain; charset=UTF-8');
  drupal_add_http_header('Content-Disposition', 'inline');

  return array(
    '#prefix' => '<div id="hw_wrapper">',
    '#suffix' => '</div>',
    '#theme' => 'helloworld_mypage',
  );
}

function helloworld_theme() {
  return array(
    'helloworld_mypage' => array(
      'variables' => array(),
      'template' => 'helloworld-mypage',
    ),
  );
}

helloworld.display.php ファイルの名前を helloworld-mypage.tpl.php に変更し、helloworld.module ファイルを含むディレクトリに配置します。

いくつかのメモを追加します。

  • hook_init()は、CSS ファイルを任意のページに含める必要がある場合に使用されます。ページでのみ使用する必要がある場合は、次のコードを使用できます。(前に示した I を次のコードに置き換えhelloworld_output()ます。残りは前と同じです。)

    function helloworld_output() {
      drupal_add_http_header('Content-type', 'text/plain; charset=UTF-8');
      drupal_add_http_header('Content-Disposition', 'inline');
    
      return array(
        '#prefix' => '<div id="hw_wrapper">',
        '#suffix' => '</div>',
        '#theme' => 'helloworld_mypage',
        '#attached' => array(
          'css' => drupal_get_path('module', 'helloworld') . '/helloworld.css',
        ),
      );
    }
    
  • への単一の呼び出しがある場合drupal_add_http_header()は、次のコードのように、#attached 配列内の項目に置き換えることができます。

    function helloworld_output() {
      return array(
        '#prefix' => '<div id="hw_wrapper">',
        '#suffix' => '</div>',
        '#theme' => 'helloworld_mypage',
        '#attached' => array(
          'css' => drupal_get_path('module', 'helloworld') . '/helloworld.css',
          'drupal_add_http_header' => array('Content-type', 'text/plain; charset=UTF-8'),
        ),
      );
    }
    

    詳細については、 drupal_process_attached()を参照してください。

于 2012-06-11T16:02:51.060 に答える
0

このコードを試してください

MYMODULE.モジュール

<?php
/**
 * Implementation of hook_menu().
 *
 * @return An array of menu items.
 */
function MYMODULE_menu() {
  $items = array();

  $items['test'] = array(
      'title' => 'Test',
      'page callback' => 'MYMODULE_test_page',
      'access arguments' => array('access content'),
  );

  return $items;
}

/**
 * Page callback
 */
function MYMODULE_test_page(){
  // Drupal 7 way to get path of files directory
  $path = variable_get('file_public_path', conf_path() . '/files');
  // Uncomment for Drupal 6
  // $path = file_directory_path() .'/files'; 
  $variables['content'] = htmlentities(@file_get_contents($path .'/test.php'));
  return theme('test_page', $variables);
}

/**
 * Implementation of hook_theme().
 *
 * @return Array of defined theme functions
 * 
 */
function MYMODULE_theme() {

  $themes = array(
      'test_page' => array(
          'variables' => array('variables' => array()),
          'template' => 'test-page',
          'path' => drupal_get_path('module', 'MYMODULE') . '/theme'
      )
  );

  return $themes;
}

テーマ/テストページ.tpl.php

<div class="myclass">
  <pre>
    <?php print $content; ?>
  </pre>
</div>
于 2012-06-11T13:42:18.293 に答える