Drupal 7 开发内部培训资料, 分头诗人

请问node里面的modules可以调用自身的tpl吗?

赞成!
0
否决!

如果我加了一个node页面 自己做一个模块

读node页面的内容,

或者模块加载自己的数据库

但modules如何调用自己的tpl?

我是刚学drupal不久 自己写过貌似不行

对drupal的钩子还不是很熟啊  郁闷....

 

 

10 个回答

赞成!
0
否决!

看了你的陈述,估计你是有点对node , module 混淆了吧,node 跟自定义module 没有必然联系,不该混为一谈, node 本身其实就是一个module,是核心的一个 module,module 调用tpl 通过 theme() 函数就可以达成, module 加载自己的数据库是不是说错了?加载自己的数据表吧?加载数据表,可以在module.install 文件中通过hook_schema制作关联表。基础的东西非常重要,会直接影响你对概念的理解。

赞成!
0
否决!

oh 谢谢解答  

对了是数据表

我想问下如果我想node用tpl输出自定义的html的话

应该怎么做?

如果module想用自定义的格式输出的话应该怎么做?

我试过module里用theme('feedback',array('rows'=>$rows))函数并没有任何输出

function  feedback_menu() {
  // Admin settings for the site.
  $items['admin/structure/feedback'] = array(
    'title' => '留言',
    'description' => '留言',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('feedback_form'),
    'file' => 'feedback.pages.inc',
    'access arguments' => array('feedback submit'),
    'type' => MENU_NORMAL_ITEM, // optional
  );
  $items['feedback'] = array(
    'title' => '留言',
    'description' => '留言',
    'page callback' => 'feedback_view',
    'file' => 'feedback.admin.inc',
    'access arguments' => array('feedback view'),
    'type' => MENU_NORMAL_ITEM, // optional
  );
  return $items;
}


function feedback_permission() {
  return array(
    'feedback submit' =>  array(
      'title' => t('feedback submit'),
    ),
    'feedback view' =>  array(
      'title' => t('feedback view'),
    ),
  );
}

function feedback_theme()
{
    return array(
        'feedback'=>array(
            'template' => 'feedback',
            'variables'=>array(),
            'path' => drupal_get_path('module', 'feedback'),
        )
    );
}

function feedback_view(){
    $output = "";
    $query = db_select('feedback','f');
    $query -> fields('f');
    $objects = $query -> execute() -> fetchAll();
    $rows = array();
    foreach ($objects as $key => $object) {
        $row = array();
        $row['fid'] = $object -> fid;
        $row['title'] = $object -> title;
        $row['body'] = $object -> body;
        $row['email'] = $object -> email;
        $row['ftype'] = $object -> ftype;
        $row['created'] = date("Y/m/d", $object -> created);
        $rows[] = $row;
    }

    $output .= theme('pager');
    $output .= theme('feedback', array('rows' => $rows));//自定义 样式为feedback
    $output .= theme('pager');

    return $output;
}

 

赞成!
0
否决!

你有feedback.tpl.php 吗?

赞成!
0
否决!

有的

 

我找了好多例子都是这样  我不知道什么地方错了 

但换theme('table')或者theme('item_list')就正常输出....

赞成!
0
否决!

feedback.tpl.php内容是什么

赞成!
0
否决!
這裡是feedback.tpl.php的代碼
<div id="searchresults" class="clearfix">
<?php foreach($rows as $data){?>
<div class="feedback">
  <div class="email"><?php print $data['email']?></div>
  <?php print $data['title']?>
  <div class="created"><?php print $data['created']?></div>
</div>
<?php }?>
</div>
赞成!
0
否决!

好像好詭異....會不會是有其他setting或者參數控制了不能使用tpl?

赞成!
0
否决!

惨了,好像都没错,没发现问题。。。试一下改tpl名看看?

赞成!
0
否决!

之前改過貌似也不行....

這樣改應該沒錯吧?

你用我的這個模塊加載看看能調用tpl麼?

我上傳模塊上來?

 

<?php
function feedback_theme()
{
    return array(
        'feedback1'=>array(
            'template' => 'feedback-123',
            'variables'=>array(),
            'path' => drupal_get_path('module', 'feedback'),
        )
    );
}

function feedback_view(){//读出数据库资料,并且以table格式显示,同时分页
    $output = "";
    $query = db_select('feedback','f');
    $query -> fields('f');
    $objects = $query -> execute() -> fetchAll();
    $rows = array();
    foreach ($objects as $key => $object) {
        $row = array();
        $row['fid'] = $object -> fid;
        $row['title'] = $object -> title;
        $row['body'] = $object -> body;
        $row['email'] = $object -> email;
        $row['ftype'] = $object -> ftype;
        $row['created'] = date("Y/m/d", $object -> created);
        $rows[] = $row;
    }

    $output .= theme('pager');
    $output .= theme('feedback1', array('rows' => $rows));//自定义 样式为feedback
    $output .= theme('table',array('rows'=>$rows));
    $output .= theme('pager');

    return $output;
}
赞成!
0
否决!

好像上傳不了zip文件....