将microdata添加到面包屑 - 钩子的有些麻烦 -- 7 领域 和 theming 领域 和 hooks 领域 和 breadcrumbs 领域 drupal 相关 的问题

Add microdata to breadcrumbs - Some trouble with hooks


0
vote

问题

中文

我正在尝试将microdata添加到面包屑上。我在web 这个修复我试图将其包含在我自己的SEO模块中:

  function mymod_page_alter(&$variables) {     if (!isset($variables['breadcrumb'])) {         $variables['breadcrumb'] = theme('my_microdata', array('breadcrumb' => drupal_get_breadcrumb()));     } } function mymod_theme($existing, $type, $theme, $path) {   return array(     'my_microdata' => array(      'variables' => array('breadcrumb' =>array()),     ),   ); } function mymod_menu_breadcrumb_alter(&$active_trail, $item){   foreach($active_trail as $id=>$active_trail_item){     $active_trail[$id]['localized_options']['attributes']['itemprop'][]="url";   } } function theme_my_microdata($variables){  $breadcrumb=$variables['breadcrumb']; print_r(debug_backtrace());  $output="*+*+*+*+*";   if (!empty($breadcrumb)) {     // Provide a navigational heading to give context for breadcrumb links to     // screen-reader users. Make the heading invisible with .element-invisible.     $output = '<h2 class="element-invisible">' . t('You are here') . '</h2>';     $output .= '<div class="breadcrumb">';     $separator="";     foreach($breadcrumb as $breadcrumb_item){       $output.='<span typeof="datav:Breadcrumb">'.$separator.$breadcrumb_item."</span>";       $separator="»";     }     $output .='</div>';   }      return $output."xXxXxXx"; }   

到目前为止,我检查了所有此代码都已执行。但此主题未应用于我的页面。为什么我的代码不起作用?这可能与模块 breadcrumb 有关吗?我知道这个输出将是垃圾,但我看不到结果。

如果我猜对由 theme.inc 行1682ff theme_breadcrumb(...) 而不是我的代码。我如何改变这个?


我刚发现了 theme_breadcrumbs 那里显示在解决方案中:

  function YOURTHEME_breadcrumb($variables) {   
嗯,可以 yourtheme 我的模块名称或者有我建立主题?
英文原文

I'm trying to add microdata to the breadcrumbs. I found on the web this fix which I tried to include to my own SEO module like this:

function mymod_page_alter(&$variables) {     if (!isset($variables['breadcrumb'])) {         $variables['breadcrumb'] = theme('my_microdata', array('breadcrumb' => drupal_get_breadcrumb()));     } } function mymod_theme($existing, $type, $theme, $path) {   return array(     'my_microdata' => array(      'variables' => array('breadcrumb' =>array()),     ),   ); } function mymod_menu_breadcrumb_alter(&$active_trail, $item){   foreach($active_trail as $id=>$active_trail_item){     $active_trail[$id]['localized_options']['attributes']['itemprop'][]="url";   } } function theme_my_microdata($variables){  $breadcrumb=$variables['breadcrumb']; print_r(debug_backtrace());  $output="*+*+*+*+*";   if (!empty($breadcrumb)) {     // Provide a navigational heading to give context for breadcrumb links to     // screen-reader users. Make the heading invisible with .element-invisible.     $output = '<h2 class="element-invisible">' . t('You are here') . '</h2>';     $output .= '<div class="breadcrumb">';     $separator="";     foreach($breadcrumb as $breadcrumb_item){       $output.='<span typeof="datav:Breadcrumb">'.$separator.$breadcrumb_item."</span>";       $separator="xc2xbb";     }     $output .='</div>';   }      return $output."xXxXxXx"; } 

So far I checked that all this code is executed. But this theming is not applied on my page. Why does my code not work? Could this been related with the module breadcrumb? I know that this output will be garbage but I cannot see the result.

If I guess right than is the output created by theme.inc line 1682ff theme_breadcrumb(...)instead of my code. How can I change that?


I just found the theme_breadcrumbs there is shown in their solution this line:

function YOURTHEME_breadcrumb($variables) { 

Well can YOURTHEME my module name or have I to build a theme?

           

回答列表

1
 
vote
vote
最佳答案
 

您的实现 hook_page_alter( )不起作用,因为传递给钩子( $page )不包含 $page['breadcrumb']

我使用以下代码来验证传递为参数的参数的内容。

  $path = 'node/14';  if ($router_item = menu_get_item($path)) {   if ($router_item['access']) {     if ($router_item['include_file']) {       require_once DRUPAL_ROOT . '/' . $router_item['include_file'];     }     $page_callback_result = call_user_func_array($router_item['page_callback'], $router_item['page_arguments']);   } }  $main_content_display = &drupal_static('system_main_content_added', FALSE);  if (is_string($page_callback_result) || (is_array($page_callback_result) && (!isset($page_callback_result['#type']) || ($page_callback_result['#type'] != 'page')))) {   drupal_set_page_content($page_callback_result);   $page_callback_result = element_info('page'); }  foreach (module_implements('page_build') as $module) {   $function = $module . '_page_build';   $function($page_callback_result); }  drupal_alter('page', $page_callback_result);  if (!$main_content_display) {   $page_callback_result['content']['system_main'] = drupal_set_page_content(); }  dsm($page_callback_result);   

"node / 14" 是我在测试站点上的"文章" 节点的路径。
已创建代码,查看不同的Drupal函数的代码: drupal_deliver_html_page(), drupal_deliver_page( ),和 menu_execute_active_handler()。它需要Devel模块,因为它使用其一个函数。

这是 dsm() 的输出。

src =

您可以覆盖用于面包屑的主题功能,实现 hook_theme_registy_alter()。

  function mymodule_theme_registry_alter(&$theme_registry) {   if (isset($theme_registry['breadcrumb'])) {     $theme_registry['breadcrumb']['function'] = 'theme_mymodule_breadcrumb';   } }   

theme_mymodule_breadcrumb() 是替换 theme_breadcrumb(),它得到相同的参数。

$variables :包含:

的关联数组
  • 填充:包含面包屑链接的数组。

如果要更改其输出,应覆盖主题函数。如果要更改传递到 theme_breadcrumb() 的变量的值,请使用drupal 7您可以实现预处理功能。

  function mymodule_preprocess_breadcrumb(&$variables) {   // Your code. }   
 

Your implementation of hook_page_alter() doesn't work because the parameter passed to the hook ($page) doesn't contain $page['breadcrumb'].

I used the following code to verify the content of the parameter passed as argument.

$path = 'node/14';  if ($router_item = menu_get_item($path)) {   if ($router_item['access']) {     if ($router_item['include_file']) {       require_once DRUPAL_ROOT . '/' . $router_item['include_file'];     }     $page_callback_result = call_user_func_array($router_item['page_callback'], $router_item['page_arguments']);   } }  $main_content_display = &drupal_static('system_main_content_added', FALSE);  if (is_string($page_callback_result) || (is_array($page_callback_result) && (!isset($page_callback_result['#type']) || ($page_callback_result['#type'] != 'page')))) {   drupal_set_page_content($page_callback_result);   $page_callback_result = element_info('page'); }  foreach (module_implements('page_build') as $module) {   $function = $module . '_page_build';   $function($page_callback_result); }  drupal_alter('page', $page_callback_result);  if (!$main_content_display) {   $page_callback_result['content']['system_main'] = drupal_set_page_content(); }  dsm($page_callback_result); 

"node/14" is the path for an "Article" node I have on my test site.
The code has been created looking at the code of different Drupal functions: drupal_deliver_html_page(), drupal_deliver_page(), and menu_execute_active_handler(). It requires the Devel module, as it uses one of its functions.

This is the output given by dsm().

screenshot

You can override the theme function used for the breadcrumb, implementing hook_theme_registry_alter().

function mymodule_theme_registry_alter(&$theme_registry) {   if (isset($theme_registry['breadcrumb'])) {     $theme_registry['breadcrumb']['function'] = 'theme_mymodule_breadcrumb';   } } 

theme_mymodule_breadcrumb() is the function that replaces theme_breadcrumb(), and it gets the same parameters.

$variables: An associative array containing:

  • breadcrumb: An array containing the breadcrumb links.

The theme function should be overridden if you want to alter its output. If you want to alter the value of the variables passed to theme_breadcrumb(), with Drupal 7 you can implement a preprocess function.

function mymodule_preprocess_breadcrumb(&$variables) {   // Your code. } 
 
 
   
   

相关问题

6  视图公开过滤器重定向到错误的URL  ( Views exposed filter redirects to wrong url ) 
在提交过滤器设置后,在页面(CTOOLS页面管理器模块中的面板)上使用"视图内容" 窗格,过滤器路径(在URL中)而不是应用于当前页面(具有视图),它被添加到根域(主页)。 请给出一个提示,设置可能有什么问题? ...

22  如何基于页面路径/深度动态地将类添加到正文标记?  ( How to add classes to body tag dynamically based on page path depth ) 
如何动态地将类添加到正文标记,例如下面的此示例? -home --melbourne <body class="melbourne"> ---主题公园 <body class="melbourne theme_parks"> ---餐厅<代码> <body class="melbourne resta...

3  如何在叠加模式中表单提交后重定向用户?  ( How to redirect user after form submit in overlay mode ) 
以下代码将用户重定向到 node/add/article 但不使用叠加。 $form_state['redirect'] = 'node/add/article' 如何在叠加模式中打开 node/add/article ? ...

7  如何选择要跳过Drush SQL-Sync @dev @staging的哪些表?  ( How to choose what tables to skip for drush sql sync dev staging ) 
在我以前的问题之后 如何设置Drush SQL-sync不在@dev和@staging之间克隆用户? 我手动预选了80多个表,不应该自动同步(内容,角色和权限,用户,临时,缓存)。我对这个解决方案并不完全满意。为什么?因为我的过滤器决策是基于经验,直觉和猜测,当我想使用最好的实践方法时。 如何正确选择要跳过 drus...

9  在节点上“更改”  ( Changed by on nodes ) 
mysql> select nid, uid, created, changed from node; +-----+-----+------------+------------+ | nid | uid | created | changed | +-----+-----+------------...

1  进口推文,Blogpost,Flickr照片,幻灯片,[关闭]的好方法  ( A good way to import tweets blogpost flickr photos slideshare ) 
关闭。这个问题是基于意见的。它目前不接受答案。 想要改进这个问题?更新问题,以便通过编辑此帖的事实和引用来回答。 关闭 4年前。 ...

1  如果使用AJAX加载了评论表单,则忽略Ajax提交  ( Ajax submit ignored if comments form is loaded with ajax ) 
在D7中,我有一个自定义模块,在注释表单上启用Ajax表单。这是伟大的。 我也有注释在 commessblock 模块中使用 block_refresh 用下面的片段。这很好地展示评论和表格。但是,Ajax表单提交停止工作。 我试过呼叫 $Drupal.attachBehaviors() (如下所示)和 $Drupa...

3  自定义节点状态  ( Custom node status ) 
在 admin/content 中有"状态" 过滤器默认提供给我们: any published not published promoted not promoted sticky not sticky 我可以将这些映射直接到数据库中的 node 表格: mysql> select nid, stat...

3  视图中的位置/距离计算字段结果?  ( Location distance based calculated field in views results ) 
使用模块: drupal 7.12 意见3.3 位置3.x-dev (当然更多) 我有一个漂亮的标准视图,用户输入了距邮政编码的距离的接近过滤器,用于显示某个位置附近的商店(您的标准经销商/存储定位器搜索)。我想添加一个计算的字段(或其他东西)来显示每个商店从输入的邮政编码中的距离。此字段仅在视图中使用,...

8  查看3,语言上的上下文过滤器 - 允许多种语言  ( Views 3 contextual filter on language allow for multiple languages ) 
所以对于这个网站,我正在建立我需要能够执行以下操作。 当用户观看英语网站时显示所有英语文章 当用户在荷兰语中查看网站时,显示所有荷兰文章 - 但也是未经翻译的英语 当用户以德语查看网站时,显示所有德语文章 - 也是未经翻译的英语。 上下文过滤器,'内容翻译:语言'只允许放入一个值。这是指定的语言或全部。 但在我...

2  将查询转换为db_query_range [关闭]  ( Convert query to d7 for db query range ) 
这个问题不太可能帮助任何未来的访客;它仅与小地理区域,特定时刻及时的特定时刻或非常狭窄的情况,这些情况通常不适用于互联网的全球观众。有关帮助提出这个问题更广泛适用,请访问帮助中心。 ...

1  Mollom CAPTCHA小部件未显示在自定义表单上  ( Mollom captcha widget not showing up on a custom form ) 
d7 + mollom。我希望我的用户每次点击我网站上的 /file/123/download 如 /file/123/download 这样的链接时都会填写CAPTCHA。我正试图向我的需求弯曲Mollom Captcha,但还没有取得任何成功。 Mollom公共和私钥表示,他们已经被Mollom Server验...

2  显示菜单的子链接  ( Displaying a menus child links ) 
似乎是,默认情况下,emega和其他主题不会呈现子链接。 我已经尝试过各种模块(例如超级鱼和megamenu),但他们没有提供一个允许我主题到设计的结构。 我找到了这个页面,但它似乎没有使用 theme_links() 。 有没有一种简单的方法来启用我的所有菜单链接,并且在渲染之前仍然能够钩住它? ...

52  配置临时目录  ( Configuring the temporary directory ) 
我最近将一个站点从localhost移动到vps。我已经设法使公共和私人文件可写;但是,我不确定在哪里找到临时文件夹以及如何更改权限。我继续收到此消息: 无法复制指定的文件:// file3hl91e,因为未正确配置目标目录。这可能是由文件或目录权限的问题引起的。系统日志中有更多信息。 我正在使用Virtualm...

0  Drupal 7 - 完成在视图中嵌入观点的想法所需的建议  ( Drupal 7 advice needed to accomplish the idea of embedding a view in a view ) 
使用drupal 7 - 我的视图显示每个员工的所有项目分配。此视图正常工作,并以部门节点显示为块。 我有另一个显示页面"部门目录" 的视图。其中目录列出了诸如部门名称,地址,电话,传真,电子邮件等字段。 我尝试完成的想法是有一个部门的字段列表,然后将其列出员工分配。示例: view页面:部门: 财务部门 地址...

3  如何在分类法中向儿童展示父项条款?  ( How to show children terms of parent terms in taxonomy ) 
好的这件事是让我完全猛拉!我认为这个问题在某种程度上被问到了,但我似乎太愚蠢了,以调整我的要求。 我创建了一个名为"品牌" 的分类词汇,如此如此如此 级别1:品牌名称,如罗技,千兆字节等。 2级:产品类别如小鼠,键盘,耳机等每个品牌内。 3级:每个类别内的实际产品。 这些级别可以在必要时更深入。就像在老鼠一样,可...

1  有些麻烦AutoPath  ( Some trouble autopath ) 
我对用户路径别名有一些麻烦。我希望每个用户都有一个小页面 /member/username 。强制执行我在 user path下的设置( /admin/config/search/path/patterns )下建立( 99887665 )拼盘: member/[user:name] 。 这个似乎很好,但如果我看看联...

0  页面构建的$内容在哪里?  ( Where is the content of a page build ) 
我想将一些东西添加到我的 99887663 变量中添加到我的节点模板文件上,但在哪里组成这个变量?我假设它在template.php文件中,但具体函数归结 $content 变量的内容? ...

3  从核心模块中删除代码而不修改它(使用挂钩?)  ( Remove a code from core module without modifying itusing hooks ) 
参考我的问题< / a>关于从书页链接区域中删除"添加新注释" 链接,有没有办法在钩子的帮助下删除代码。我是实现钩子的新手。我找到了解决方案问题,但我需要更好的方法来实现它(也许是通过钩子,IDK)。 编辑 当我不得不从Core Book模块的 book-navigation.tpl.php 中发表 998...

5  如何在Drupal 7中使用Smarty  ( How to use smarty in drupal 7 ) 
我在PHP编程中有一些先前的经验,但我已经使用Smarty作为我的模板引擎,并发现易于使用。我读到Drupal正在利用Phptemplate作为模板引擎。所以,我只是想知道如何在Drupal中实现Smarty模板引擎? ...




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


Licensed under cc by-sa 3.0 with attribution required.