Drupal China
由于Ubuntu官方网站从MoinMoin迁移到Drupal,所以也试着学习Drupal,也试着参考Ubuntu官方网站( http://www.ubuntu.com )上的效果来学习制作Theme,其他都做好了,但就是在站点中增加参考站点右上角的主链接和次链接之后,只能显示主链接,而次链接却没有显示出来,我在page.tpl.php文件中添加了
<?php
if (isset($secondary_links)) {
echo "Secondary Links 存在";
} else {
echo "Secondary Links 不存在";
}
?>结果显示Secondary Links 不存在。
我的做法是在管理》菜单》Primary Links 中添加了Products等菜单,然后添加二级菜单并将该菜单的父链接设为Products等主链接上,并勾选Products等主链接的Expanded选项。由于初次接触Drupal,不知哪里出错,还望大侠们指教!
比较奇怪。。。我没
比较奇怪。。。我没用过二级链接,有时间测试一下。。。
--------------------------------------------------
我的Drupal试验田:http://verydummy.com/drupal
--------------------------------------------------
這裡有數個地方要留
這裡有數個地方要留意
在內建的theme 中
primary link 的表示方式和一般的meau 是不同的
你不會在blocks 的header 中找到primary links
所以就算在menu 中primary link 是 expanded
它都不會expand
要將它可expand 化
要在theme 中移除
<?php if (isset($primary_links)) : ?><?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?>
<?php endif; ?>
在blocks 中將primary 放到header 中就可以了
那popup 的效果是用CSS 顯示的
沒有用到javascript 或 改什麼code
Joetsui's blog
--------------------------------
Joetsui's blog
可以具体说说不用Javas
可以具体说说不用Javascript,如何用CSS实现PopUp效果吗?
--------------------------------------------------------
Cartson's X次方
--------------------------------------------------------
Cartson.com
首要明白source code
首要明白source code 是ul li 的組合
<ul class="pri">
<li>
item1
<ul class="sec">
<li>sub-item1</li>
<li>sub-item2</li>
</ul>
</li>
<li>item2</li>
<li>item3</li>
</ul>
css for firefox:
.pri li .sec{left:-999px;}.pri li:hover .sec{left:0px;}
巧妙的使用hover 就可以了
Joetsui's blog
--------------------------------
Joetsui's blog
哇!真的好巧妙,谢
哇!真的好巧妙,谢谢分享:)
对了,这样的方法只针对Firefox吗,IE适用吗?
--------------------------------------------------------
Cartson's X次方
--------------------------------------------------------
Cartson.com
忘了打..... IE7+ IE6
忘了打.....
IE7+
IE6 因為只有 <a> support hover
要用javascript onmouseover 將 menu-hover class 加上去
var sfEls = document.getElementById("pri").getElementsByTagName("LI");for (var i=0; i<sfEls.length; i++) {
sfEls[i].onmouseover=function() {
this.className+=" sfhover";
}
sfEls[i].onmouseout=function() {
his.className=this.className.replace(new RegExp(" sfhover\\b"), "");
}
}
Joetsui's blog
--------------------------------
Joetsui's blog
我现在倒也不是说如
我现在倒也不是说如何使二级链接出现,主要是取不到 $secondary_links 的值,只要有值的话,那如何做就简单了!我现在不知道我到底错在哪里!我的Primary Links如下所示:
Products 否 编辑 禁用 删除
- What is Ubuntu? 编辑 禁用 删除
- Download 编辑 禁用 删除
- Get Ubuntu 编辑 禁用 删除
- Software Catalogue 编辑 禁用 删除
- Merchandise 编辑 禁用 删除
- Case Studies 编辑 禁用 删除
Support 否 编辑 禁用 删除
- Community 编辑 禁用 删除
- Documentation 编辑 禁用 删除
- Commercial 编辑 禁用 删除
- Training 编辑 禁用 删除
Community 否 编辑 禁用 删除
- Code of Conduct 编辑 禁用 删除
- Get Involved 编辑 禁用 删除
- Report a Problem 编辑 禁用 删除
- The Ubuntu Story 编辑 禁用 删除
Partners 否 编辑 禁用 删除
- Partner Programme 编辑 禁用 删除
- Programme Tracks 编辑 禁用 删除
- Case Studies 编辑 禁用 删除
- Software Programme 编辑 禁用 删除
- Hardware Programme 编辑 禁用 删除
- Find a Partner 编辑 禁用 删除
News 否 编辑 禁用 删除
- Spotlight 编辑 禁用 删除
- Security Notices 编辑 禁用 删除
- The Fridge 编辑 禁用 删除
- Planet Ubunt 编辑 禁用 删除
- Press Releases 编辑 禁用 删除
- Media Contact 编辑 禁用 删除
其中扩展勾选或不勾选都没作用!
设置情况如下:
主链接与次级链接(primary and secondary links)为你的站点提供一个导航菜单,一般显示于浏览器窗口的右上角(不同的外观主题可能会放置在不同的位置)。可以在管理菜单页面设置所要显示的链接,或者也可以使用Drupal自带的菜单项。
包含主链接的菜单:
Primary Links
包含次级链接的菜单:
Primary Links
如果您选了和主链接一样的菜单,那么次级链接将显示这个导航结构中相应的次级结构。
不知问题出在哪里!
====
我心无畏,源自我本无知
我心无畏,源自我本无知
查了phpTemplate.engine文
查了phpTemplate.engine文件,发现:
$variables = array(
'base_path' => base_path(),
'breadcrumb' => theme('breadcrumb', drupal_get_breadcrumb()),
'closure' => theme('closure'),
'content' => $content,
'feed_icons' => drupal_get_feeds(),
'footer_message' => filter_xss_admin(variable_get('site_footer', FALSE)) . "\n" . theme('blocks', 'footer'),
'head' => drupal_get_html_head(),
'head_title' => implode(' | ', $head_title),
'help' => theme('help'),
'language' => $GLOBALS['locale'],
'layout' => $layout,
'logo' => theme_get_setting('logo'),
'messages' => theme('status_messages'),
'mission' => isset($mission) ? $mission : '',
'primary_links' => menu_primary_links(),
'search_box' => (theme_get_setting('toggle_search') ? drupal_get_form('search_theme_form') : ''),
'secondary_links' => menu_secondary_links(),
'sidebar_left' => $sidebar_left,
'sidebar_right' => $sidebar_right,
'site_name' => (theme_get_setting('toggle_name') ? variable_get('site_name', 'Drupal') : ''),
'site_slogan' => (theme_get_setting('toggle_slogan') ? variable_get('site_slogan', '') : ''),
'css' => drupal_add_css(),
'styles' => drupal_get_css(),
'scripts' => drupal_get_js(),
'tabs' => theme('menu_local_tasks'),
'title' => drupal_get_title()
);
而其中menu_secondary_links()函数如下:
function menu_secondary_links() {
$msm = variable_get('menu_secondary_menu', 0);
if ($msm == 0) {
return NULL;
}
if ($msm == variable_get('menu_primary_menu', 0)) {
return menu_primary_links(2, $msm);
}
return menu_primary_links(1, $msm);
}
而 variable_get() 函数代码如下:
function variable_get($name, $default) {
global $conf;
return isset($conf[$name]) ? $conf[$name] : $default;
}
所以从上面来看最关键的就是$conf['menu_secondary_menu']是否被设置了!
====
我心无畏,源自我本无知
我心无畏,源自我本无知
找到 include/menu.inc
找到 include/menu.inc 文件,在 function menu_secondary_links() 中添加 print $msm; 语句,发现该值等于2,而variable_get('menu_primary_menu', 0) 也等于2,所以返回的是 menu_primary_links(2, 2); 所以查阅 menu_primary_links() 函数,如下所示:
function menu_primary_links($start_level = 1, $pid = 0) {
if (!module_exists('menu')) {
return NULL;
}
if (!$pid) {
$pid = variable_get('menu_primary_menu', 0);
}
if (!$pid) {
return NULL;
}
if ($start_level < 1) {
$start_level = 1;
}
if ($start_level > 1) {
$trail = _menu_get_active_trail_in_submenu($pid);
if (!$trail) {
return NULL;
}
else {
$pid = $trail[$start_level - 1];
}
}
$menu = menu_get_menu();
$links = array();
if ($pid && is_array($menu['visible'][$pid]) &&\
isset($menu['visible'][$pid]['children'])) {
$count = 1;
foreach ($menu['visible'][$pid]['children'] as $cid) {
$index = "menu-$start_level-$count-$pid";
if (menu_in_active_trail_in_submenu($cid, $pid)) {
$index .= "-active";
}
$links[$index] = menu_item_link($cid, FALSE);
$count++;
}
}
// Special case - provide link to admin/build/menu if primary links is empty.
if (empty($links) && $start_level == 1 && $pid == variable_get('menu_primary_menu', 0) && user_access('administer menu')) {
$links['1-1'] = array(
'title' => t('Edit primary links'),
'href' => 'admin/build/menu'
);
}
return $links;
}
可以肯定该函数返回的值是 NULL,所以对该函数进行测试!
if ($start_level > 1) {
echo "hello";
$trail = _menu_get_active_trail_in_submenu($pid);
echo $trail;
if (!$trail) {
return NULL;
}
发现 hello 被显示,而后面的 $trail 变量则没有显示,这使测试焦点集中在 menu_get_active_trail_in_submenu() 函数中!
====
我心无畏,源自我本无知
我心无畏,源自我本无知
樓主, 在Administer->site
樓主,
在Administer->site building->blocks 中將primary-links 放到 header block 中就可以有"expanded"的primary-links了
theme 中的
print $primary-links是一個exceptional 的方法表示primary-link所以沒有"expand"
Joetsui's blog
--------------------------------
Joetsui's blog
可我的问题并不是
可我的问题并不是 print $primary-links 出不出现 Primary Link,而是 print $secondary-links 出不出现 Secondary Link 的问题,或者说如何获取主链接下的次链接数据的问题!
====
我心无畏,源自我本无知
我心无畏,源自我本无知
試一下就會明白 在Admi
試一下就會明白
在Administer->site building->blocks 中將primary-links 放到 header block 中就可以有"expanded"的primary-links
Joetsui's blog
--------------------------------
Joetsui's blog
我做的是Theme,我前面
我做的是Theme,我前面说了要仿Ubuntu官方网站的右上角的效果,我把区块加上去是没有这样的效果的,而是需要生成类似如下的代码,而不是添加一个区块在 Header 区:
<ul>
<li>xxxxx
<ul class="submenu">
<li>yyyyy</li><li>
....
</li></ul>
</li>
....
</ul>
所以我还是需要取得 $secondary_links 的值
====
我心无畏,源自我本无知
我心无畏,源自我本无知
不明白的是 原始的
不明白的是
原始的 primary link 點選,那換頁時,secondary link會出現。
不管有沒有選expend都會出現。
我的疑問是 如果點了primary links,選單設定也建立好樹狀
那始終無法出現secondary link,只有primary links而已,
該怎麼辦?
之前是可以成功,可是server reinstall時,這功能就沒有反應了,不知道該怎麼想。
試一下 還做了個三級
試一下
還做了個三級的menu
http://joetsui.110mb.com/
Joetsui's blog
--------------------------------
Joetsui's blog
不再局限于 $primary_links 之类的了,自己写了一个,终于搞定了!
火起来不再使用 $primary_links 之类的函数,而是使用代码来完成我的设想!其代码如下:
<?php
$output = "<ul>";
$pri_menu = menu_get_item(2);
//print_r($pri_menu);
foreach($pri_menu['children'] as $pm_item) {
$pri_links = menu_get_item($pm_item);
$output .= "<li><a href=".$pri_links['path'].">".$pri_links['title']."</a><ul class='submenu'>";
foreach($pri_links['children'] as $sm_item) {
$sec_links = menu_get_item($sm_item);
$output .= "<li><a href=".$sec_links['path'].">".$sec_links['title']."</a></li>";
}
$output .= "</ul>";
}
$output .= "</ul>";
print $output;
?>
====
我心无畏,源自我本无知
我心无畏,源自我本无知
插嘴一下 寫個resursive
插嘴一下
寫個resursive 的function 可以做到無限層結構
類似:
<?php$output = ''
function menu($id, &$output){
$pri_menu = menu_get_item($id);
foreach($pri_menu['children'] as $pm_item) {
$output .= "<ul>";
$output .= "<li><a href=".$pri_links['path'].">".$pri_links['title']."</a>";
menu($pri_links['children'],&output);
$output .= "</ul>";
}
}
?>
Joetsui's blog
--------------------------------
Joetsui's blog
本来是想写成递归形
本来是想写成递归形式的函数,主要是
主链接的 <ul>与次链接的 <ul class="submenu">不太一致!不过还是要谢谢兄弟的热心呀!我是 Ubuntu 中文社区的 FireHare,以后多交流!!:)====
我心无畏,源自我本无知
我心无畏,源自我本无知
用一下css
用一下css 可以用同一個class 的
<ul class="menu">
<li>
item1
<ul class="menu">
<li>sub-item1</li>
<li>sub-item2</li>
</ul>
. </li>
<li>item2</li>
<li>item3</li>
</ul>
.menu li .menu{left:-999px;}.menu li:hover .menu{left:0px;}
我都有用ubuntu, 等待7.04 出正式版^^
Joetsui's blog
--------------------------------
Joetsui's blog
有道理,呵呵!还真
有道理,呵呵!还真是笨了一回!:)
====
我心无畏,源自我本无知
我心无畏,源自我本无知
发现二个Bug!
发现二个Bug
其一:没有考虑次级链接不存在的情况
其二:没有考虑菜单的权重
故修改如下:
<?php
$output = "<ul>";
$pri_menu = menu_get_item(2);
$pm_links = array();
foreach($pri_menu['children'] as $pmid) {
$pm_item = menu_get_item($pmid);
$pm_links[$pm_item['weight']] = $pm_item;
foreach($pm_item['children'] as $smid) {
$sm_item = menu_get_item($smid);
$pm_links[$pm_item['weight']]['sm_links'][$sm_item['weight']] = $sm_item;
}
ksort($pm_links[$pm_item['weight']]['sm_links']);
}
ksort($pm_links);
foreach($pm_links as $pm_item) {
$output .= "<li><a href=".$pm_item['path'].">".$pm_item['title']."</a>";
if (count($pm_item['children']) != 0) {
$output .= "<ul class='submenu'>";
foreach($pm_item['sm_links'] as $sm_item) {
$output .= "<li><a href=".$sm_item['path'].">".$sm_item['title']."</a></li>";
}
$output .= "</ul>";
}
$output .="</li>";
}
$output .= "</ul>";
print $output;
?>
====
我心无畏,源自我本无知
我心无畏,源自我本无知
谢谢 joetsui 兄弟的帮忙!
十分感谢 Joetsui 兄弟的热心,不过 http://joetsui.110mb.com/ 好象打不开,不知是怎么回事?
====
我心无畏,源自我本无知
我心无畏,源自我本无知
我可以打開........... Jo
我可以打開...........
Joetsui's blog
--------------------------------
Joetsui's blog
做了一个显示菜单的函数,希望对大家有所帮助
<?phpfunction show_menu_modified($id = 2)
{
$output = '';
$pri_menu = menu_get_item($id);
if(@is_array($pri_menu['children']))
{
$output .= '<ul class="menu">'."\n";
$array_sort_weight = array();
foreach($pri_menu['children'] as $sec_id)
{
$sec_menu = menu_get_item($sec_id);
$array_sort_weight[] = $sec_menu['weight'];
}
array_multisort($array_sort_weight, $pri_menu['children']);
foreach($pri_menu['children'] as $sec_id)
{
$sec_menu = menu_get_item($sec_id);
if(@is_array($sec_menu['children']) && $sec_menu['children'][0] > 0)
{
$output .= '<li class="expanded"><p>'.$sec_menu['title'].'</p>'.show_menu_modified($sec_id).'</li>'."\n";
}
else
{
$output .= '<li class="leaf"><a href="'.url($sec_menu['path']).'">'.$sec_menu['title'].'</a></li>'."\n";
}
}
$output .= "</ul>";
}
return $output;
}
?>
有没有相关的模块可
有没有相关的模块可以做2级菜单的
找到一个DHTML_menu的模块可以用
但是模块必须是点击才能看见二级菜菜单
我也想要http://www.ubuntu.com/上的鼠标经停效果的菜单
怎么做到
(只要有相应的html框架,我就可以做到,对自己的css有信心,不用javascript可以实现)
default 的多級menu +css
default 的多級menu +css 己經可以
--------------------------------
Joetsui's blog
--------------------------------
Joetsui's blog
default
default 的必须是点击主菜单才出现二级 菜单
我是想在默认的情况下所有菜单都一直显示
然后我就可以用css控制了
就是怎么让全部的菜单显示出来这个问题
我用的是primary links作为主菜单 e.g.(home products about contact)
dhtml_menu这个模块只能在firefox里可以显示二级菜单,IE不行
请教joetsuihk了
(说明:我刚开始学drupal不久)
有一個expand
有一個expand 的選項的
--------------------------------
Joetsui's blog
--------------------------------
Joetsui's blog
哈哈 太谢谢了! 一找
哈哈
太谢谢了!
一找到这个复选框一切都搞定了
再次谢谢joetsui!
谢谢
^^ --------------------------
^^
--------------------------------
Joetsui's blog
--------------------------------
Joetsui's blog