2012-03-09 3 views
0

드루팔 (Drupal 7)에서 블록을 스타일링하려고하는데 상황을 파악하는 데 어려움을 겪고 있습니다!Drupal 7의 메뉴 블록 메뉴 링크 스타일링

메인 메뉴에서 모든 링크를 가져 오기 위해 menu_block 모듈을 사용했습니다. 그것은 ul에 링크가있는 블록을 생성합니다. 각 메뉴 트리마다 div로 주제를 지정하고 싶습니다.

스타일링 자체는 쉬워야하지만 스타일 엮기에 사용해야하는 테마 훅/템플릿 파일을 찾는 데 어려움을 겪고 있습니다.

theme_menu_treetheme_menu_link에 연결하려고했지만 테마 방식이 너무 많아서 스타일링하는 것을 볼 수 없습니다. 나는 menu-tree--menu-block--main-menu.tpl.php을 시도했지만 변수는 내가 원하는 것만 큼 다르지 않습니다.

내 생각에 변수에 block.tpl.php의 스타일을 지정해야하지만 특정 블록에 대해 어떻게해야하는지 알 수 없습니다. 블록 (블록 유형)이 (바닥 글에) 표시 될 때 메뉴 점의 스타일을 지정하려면 어디에 연결해야합니까?

답변

2

내가 가장 쉬운 (반드시 최선의) 장소 hook_block_view_alter()

function MYMODULE_block_view_alter(&$data, $block) { 
if ($block->module == 'menu_block') { 
    // Extract the links from the available data 
    $links = element_children($data['content']['#content']); 
    $content = ''; 

    // Loop through the links and build up the required output. 
    foreach ($links as $link) { 
     $content .= '<div class="something">' . l($link['#title'], $link['#href']) . '</div>'; 
    } 

    // Assign the new output to the block content...done :) 
    $data['content'] = $content; 
    } 
} 

Devel module에서이 작업을 수행하기 위해 생각하고 그들이 당신이 어떤 PHP를 살펴 보자거야 ... dpm() 기능은 여기에 당신의 가장 친한 친구 편리합니다 표준 메시지 영역에서 멋지게 구조화 된 형식의 변수. 아직 설치하지 않았다면 드루팔 (Drupal) 개발을 위해 꼭해야 할 일입니다.

해당 후크를 구현 한 후에는 드루팔 (Drupal)의 캐시를 지우는 것을 잊지 마십시오. 그렇지 않으면 시스템이 그것을 잡아 내지 않습니다.

+0

고마워요! 그 일을 :)하지만 $ data [ 'content']의 내용을 무시하는 것은 위험한 것처럼 보입니다. 다른 모듈이 똑같은 일을한다면, 내 코드가 깨질 가능성이 있습니다 : S 당신은 그것이 반드시 최선의 방법은 아니었다 고 말했습니다. 다른 문제를 해결하는 방법이 있습니까? –

+1

더 나은 방법이 있는지 확신하지 못한다고 생각하면, 그 순간에 있어야 할 것 같은 느낌이 들었습니다. :) 프로세스의 마지막 부분에서 모듈의 'weight' 열을 '시스템'테이블의 숫자가 높으면 오버라이드 된 콘텐츠가 항상 '이기게'됩니다. – Clive

2

필자의 템플릿과 후크를 올바르게 이름 짓는 방법을 알아 내려고 아주 비슷한 문제가있었습니다. menu-block-wrapper--main-menu.tpl.php

<nav role="navigation" id="siteNavigation"> 
<?php echo render($content); ?> 
</nav> 

후크 :

템플릿 (너무 많은 소음을) 도움이되지 않았다 인터넷 검색을하지만 결국 나는 Menu Block module documentation drupal.org에 그것이 올바른 방향으로 날 이끌 시도 THEMENAME_menu_tree__menu_block__MENUNAME()을 및 THEMENAME_menu_link__menu_block__MENUNAME() :

function THEME_menu_tree__menu_block__main_menu($vars) { 
    return '<ul class="my-custom-menu-wrapper">' . $vars['tree'] . '</ul>'; 
} 

function THEME_menu_link__menu_block__main_menu($data) { 

    $el = $data['element']; 

    // ... render any classes or other attributes that need to go in this <li> 
    $attr = drupal_attributes($el['#attributes']); 

    // ... render the menu link 
    $link = l($el['#title'], $el['#href'], $el['#localized_options']); 

    // ... and render any submenus 
    $sub_menu = drupal_render($el['#below']); 

    return sprintf("\n<li %s>%s %s</li>", $attr, $link, $sub_menu); 
} 
0

당신이 < UL>

에 CSS 스타일을 넣을 수 있습니다 인쇄 테마
print theme('links', array('links' => menu_navigation_links($your_menu_name), 'attributes' => array('class'=> array('ul_class'))));