我如何获得一个简单的模板来工作? -- 7 领域 drupal 相关 的问题

How do I get a simple template to work?


2
vote

问题

中文

我有一个drupal模块,其中我想通过将它放在模板文件中来与逻辑分离html。你认为这很容易,但我无法弄清楚它是如何在笨蛋中工作的。当我谷歌时,我会在大规模的指南上制作笨拙的主题或关于专注于模板过程的一个方面的文章。我下载并安装了开发人员模块的示例,该模块有一个用于模板的部分,但即使在我做出任何重大变化时也不会这样做。

我制作了一个简单的模块,称为blob以尝试达到工作。 我有一个名为blob-stuff.tpl.php:

的模板文件
  <div class="container-inline">     Hi <?php  print $myname; ?> </div>   

在blob.module我有

  function blob_menu() {   $items['blob1'] = array(     'title' => 'Blob1',     'page callback'    => 'blob_stuff',     'access arguments' => array('access content'),   );   return $items; }  function blob_theme() {   return array(         'blob_stuff'  => array(       'template' => 'blob-stuff',     ),   ); }  function template_preprocess_blob_stuff(&$variables) {   $variables['myname']='Bob'; }  function blob_stuff(){   return 'Bob'; }   

当然不起作用,因为此时我只是猜测。

允许任何人给我一个简单的工作这个例子,这是一个简单的之后,追随Drupal最佳实践?

英文原文

I have a Drupal module where I want to separate the html from the logic by placing it in a template file. You'd think this would be easy but I can't figure out how it's supposed to work within Drupal. When I google it I come upon massive guides on making Drupal themes or articles on focusing on a single aspect of the templating process. I downloaded and installed the Examples for Developers module which has a section for templating, but even that does not do exactly what I want and breaks as soon as I make any significant change.

I made a simple module called blob to try to get this to work. I have the following template file called blob-stuff.tpl.php:

<div class="container-inline">     Hi <?php  print $myname; ?> </div> 

In blob.module I have

function blob_menu() {   $items['blob1'] = array(     'title' => 'Blob1',     'page callback'    => 'blob_stuff',     'access arguments' => array('access content'),   );   return $items; }  function blob_theme() {   return array(         'blob_stuff'  => array(       'template' => 'blob-stuff',     ),   ); }  function template_preprocess_blob_stuff(&$variables) {   $variables['myname']='Bob'; }  function blob_stuff(){   return 'Bob'; } 

Which of course doesn't work, because at this point I'm just guessing.

Can anyone give me a simple, working example of this, following Drupal best practices?

  
   
   

回答列表

8
 
vote
vote
最佳答案
 

您在正确的轨道上,您唯一需要做的是在页面回调中致电您的主题函数blob_stuff()。有两种方法可以这样做,优选的方法是使用渲染阵列:

  function blob_stuff(){   $page = array   (     '#theme' => 'blob_stuff',   );    return $page; }   

您也可以直接调用您的主题功能,但这不是优选的方法:

  function blob_stuff(){   return theme('blob_stuff'); }   

但要进一步进一步,您将将名称BOB的名称融为您的代码。通常您将想要一些动态的东西,从URL中的路径中拉动。您可以使用hook_menu()

中的通配符定义动态路径
  function blob_menu() {   $items['blob1/%'] = array(     'title' => 'Blob1',     'page callback' => 'blob_stuff',     // Pass the 1st index of the path (the wildcard) to your page callback     'page arguments' => array(1),     'access arguments' => array('access content'),   );   return $items; }   

在hook_theme()中,您将添加一个变量:

  function blob_theme() {   return array(         'blob_stuff'  => array(        'variables' => array(          'name' => FALSE,        ),        'template' => 'blob-stuff',      ),   ); }   
现在在您的页面回调中,您可以将外卡传递给您的主题函数,这将在您的模板中输出:
  // $name comes from the wildcard in the URL function blob_stuff($name){   $page = array   (     '#theme' => 'blob_stuff',     '#name' => $name,   );   return $page; }   

您的模板现在将如下所示:

  <div class="container-inline">   Hi <?php  print $name; ?> </div>   
 

You're on the right track, the only thing you need to do is call your theme function in your page callback, blob_stuff(). There are two ways to do this, the preferable way is using a render array:

function blob_stuff(){   $page = array   (     '#theme' => 'blob_stuff',   );    return $page; } 

You could also directly call your theme function, but this is not the preferable way to do it:

function blob_stuff(){   return theme('blob_stuff'); } 

But to go further with this, you've hard-coded the name Bob into your code. Usually you'll want something dynamic, pulled from the path in the URL. You can define a dynamic path with a wildcard in hook_menu()

function blob_menu() {   $items['blob1/%'] = array(     'title' => 'Blob1',     'page callback' => 'blob_stuff',     // Pass the 1st index of the path (the wildcard) to your page callback     'page arguments' => array(1),     'access arguments' => array('access content'),   );   return $items; } 

In hook_theme(), you'll add a variable:

function blob_theme() {   return array(         'blob_stuff'  => array(        'variables' => array(          'name' => FALSE,        ),        'template' => 'blob-stuff',      ),   ); } 

Now in your page callback, you can pass the wild card to your theme function, which will output it in your template:

// $name comes from the wildcard in the URL function blob_stuff($name){   $page = array   (     '#theme' => 'blob_stuff',     '#name' => $name,   );   return $page; } 

Your template will now look like this:

<div class="container-inline">   Hi <?php  print $name; ?> </div> 
 
 
   
   

相关问题

4  如何使用当前用户名替换辅助菜单标题?  ( How to replace the secondary menu title with the current username ) 
辅助菜单 - 这是系统辅助菜单标题。 我需要用当前的用户名替换它,与用户菜单块相同。 我不想因为某种原因而使用用户菜单块。 我想使用deault系统菜单: <?php if ($secondary_menu): ?> <div id="secondary-menu" class="navigation">...

2  在D7中的登录失败后将用户重定向到不同的页面  ( Redirect users to different page after a login failure in d7 ) 
我想将用户重定向到不同的页面,如果他们输入错误的登录详细信息,因为我正在使用以下代码,但它不起作用。 function bartik_form_alter(&$form, &$form_state, $form_id) { if ($form_id == "user-login") { ...

1  如何在Drupal查询中使用较低函数? [复制]  ( How to use the lower function in a drupal query ) 
这个问题已经在这里有答案: 在drupal 7 db_select()中的条件下使用sql函数 (3个答案) ...

1  在某些页面上重定向用户登录表  ( Redirecting user login form on certain page ) 
方案是: 我已经使用hook_menu实现了一个菜单,在该页面中,它检查用户是否可以访问创建某些内容类型(调用请求),如果他/她确实可以访问它将使用drupal_get_form加载内容创建页面,否则它会检查是否用户尚未登录,在这种情况下它加载user_login_block,再次使用drupal_get_form函...

0  是否可以从统计模块配置读取计数?  ( Is it possible to configure read count from statistics module ) 
我在我的网站上使用博客,所以我想在用户查看博客时显示每个博客的读数。对于此,我使用了核心模块,称为统计信息。但我的要求与统计模块的可用功能不同。 我想预先设置读取计数器,以便我手动输入读取计数器的数量。例如,如果我输入100,下一个计数应该像101,102一样开始100,所以我如何实现这一目标,请建议任何模块或编程方...

0  如何防止使用饲料和Elysia Cron导入困扰  ( How to prevent that import with feeds and elysia cron gets stuck ) 
我有几个 feeds ,由 elysia cron 。 在给定时间调用饲料,后面的最后两个饲料每2分钟称为,因为它是防止它们停止的唯一方法。但是,当数据的大小和复杂性增加时,Cron过程被停止,因为最后一个馈送中的一个或两个都被卡住,永无止境。 我已经看到,通过更新数据库表 elysia_cron 通过将字段 run...

1  如何以定制金额(100或200或其他)以编程方式将产品类型捐赠添加到购物车中?  ( How to add product type donation into cart programmatically with custom amount1 ) 
我正在使用Commerce_Donate模块,我想在以某些其他页面上选择的用户,以编程方式向购物车添加产品(类型=捐赠)。在一些自定义表单上提交,我想将此捐赠类型产品添加到购物车中以处理通常的商务订单/结账。 如何实现这一目标? 谢谢。 ...

0  联系表单节点集成  ( Contact form node integration ) 
我有内容类型,我想在节点页面底部添加联系人按钮,但是 我有问题所以如何添加一个简单的联系表单,即在消息中添加节点标题以及当匿名用户转到名为"示例12" 的节点页面时,主体文本之后有"联系人" 或"提出更多" 按钮它表明了页面。 用户离开消息后,它进入管理员内容列表和管理员知道他/她去那里的页面。 示例i检查页面名为...

0  在哪里可以找到用户菜单块的代码?  ( Where can i find the code for the user menu block ) 
我正在尝试编写自定义用户菜单,但我想查看内置用户菜单块的原始代码。我在哪里可以找到它? ...

0  与独特的分页不同的观点? [关闭]  ( Different views with unique pagination ) 
关闭。这个问题需要详细信息或清晰度。它目前不接受答案。 想要改进这个问题?添加详细信息并阐明编辑此帖的问题。 关闭 4年前。 ...

0  如何在Page.tpl.php文件中覆盖主题()部分?  ( How to override theme part in page tpl php file ) 
这个问题是这个问题的扩展:当前用户名标题为辅助菜单标题,但它是不同的。 我想如何覆盖代码 99887661 中的以下部分,其中 page.tpl.php 例如,如果我想将 text => t('Secondary menu') 更改为 text => t('Any new text') 。 一种方法来做这...

0  如何修改媒体OEMBED模块生成的IFRame的输出?  ( How do i modify the output of iframes generated by media oembed module ) 
我正在尝试向D7 Media_oembed模块与YouTube视频输出的所有IFRame添加标题属性,但找不到它的写入切口点。没有任何模板具有覆盖的原始结构。 有人可以将我指向正确的地方吗? ...

1  如何使用视频模块嵌入视频?  ( How to embed videos using the video module ) 
我使用Drupal 7安装了视频模块和激活的视频和视频UI模块: https://www.drupal.org/project/video 我创建了一个带有视频字段的内容类型。现在我可以使用此内容类型上传视频。 但我无法嵌入YouTube视频。我找不到任何设置或任何嵌入的小部件,如此处所示。 我想上传视频,我想...

0  使用xdebug和phpupit调试自定义模块[关闭]  ( Debugging a custom module with xdebug and phpunit ) 
关闭。这个问题需要更多聚焦。它目前不接受答案。 想要改进这个问题?更新问题,因此它仅关注一个问题,仅通过编辑此帖。 closed 4年前。 ...

0  在视图中获得每年使用的分类法  ( Get taxonomy used for each year in a view ) 
我创建了一个观点,列出了我网站上使用了分类术语(标签)的时间数量(标签)。 tag1 (236) tag2 (200) tag3 (157) tag4 (161) tag5 (10) tag6 (90) tag7 (86) tag8 (50) t...

0  如何使用自定义列使用user_save?  ( How to use user save with custom column ) 
我在用户表中添加了自定义列,我想使用user_save以编程方式创建新用户。我怎样才能做到这一点?此代码不适用于自定义列: $new_user = array( 'name' => 'Foo', 'pass' => $...

1  Preserve NIDS脚本在Migrate D2D中添加  ( Preserve nids script add in migrate d2d ) 
文件名我必须在其中添加以下脚本? 这实际上很容易。在节点的准备()函数中 迁移类,刚刚将nid和is_new设置为true: public function prepare($node, $row) { // Preserve old nid so that old links to nodes usi...

0  如何在暴露过滤器中添加结果计数?  ( How to add results count in exposed filter ) 
我有一个更好的曝光过滤器的视图,我想为这样的每个过滤器添加项目的数量(但不使用facets): Term 1 (7) - Term 2 (5) - Term 3 (8) ... 我看到了这个 solution 但我更喜欢直接从我的视图使用查询或使用视图本身更好。 问题是,在 hook_form_alter(...

1  如何修改“has_js”cookie?  ( How do i modify the has js cookie ) 
我通过drupal 7.43部署了一个Web应用程序。我需要修改由drupal设置的 has_js cookie,以使其均以网站安全审查来解决它的HTTP和安全。 制作 has_js cookie http和secure?的应用程序 ...

2  如何在任何视图中使用自定义表?  ( How to use custom tables in any views ) 
我在drupal数据库中创建了一个自定义表。我需要在视图中使用此表数据。为此,我使用了Schema模块,但其仅显示了新视图。但我需要在我们网站的所有视图中使用这些表数据。 任何建议? ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.