it-swarm-eu.dev

Jak vložím značku <span> </span> do značky <a> </a> v mé hlavní nabídce

Na tuto otázku jsem se zeptal přesně na Stack Overflow, ale má smysl položit ji zde.

Snažím se, aby se text mezi mým tagem nezobrazil tak, že ho zalomím do a pak to upravím.

Do svého souboru template.php jsem přidal následující funkci, ale na front-endu nevidím žádný rozdíl; rozpětí se prostě neobjeví. (Vymazal jsem mezipaměť.)

Používám správnou funkci? Co dělám špatně?

function my_theme_link($variables) {
  return '<a href="' . check_plain(url($variables['path'], $variables['options'])) . '"' . drupal_attributes($variables['options']['attributes']) . '><span>' . ($variables['options']['html'] ? $variables['text'] : check_plain($variables['text'])) . '</span></a>';
} 
4
Martin Duys

Spíše než vytváření kotevní značky a předávání výsledku url() na check_plain() byste měli zavolat l () , která sestaví značku pro vás.
Nezapomeňte nastavit $options['html'] Na TRUE (kde $options Je poslední parametr předaný do l()), když řetězec předáte jako první argument l() obsahuje značky HTML; ve výchozím nastavení funkce předpokládá, že $options['html'] je FALSE.

8
kiamlaluno

Podívejte se na http://drupal.org/node/45774 / http://drupal.org/node/988842 a vývojový modul devel/theme může být užitečné také.

Myslím, že funkce, kterou používáte, je pro odkazy obecně a není specifická pro žádné menu.

function THEMENAME_links__system_MENUNAME_menu($variables) {
  $output = '';
  foreach ($variables['links'] as $link) {
    $output .= l('<span>'. check_plain($link['title']) .'</span>', $link['href'], $link);
  }
  return $output;
}

ÚPRAVA: zahrnuto rozpětí.

4
WestieUK

Řešení tohoto problému jsem našel po mnoha vyhledáváních. Mimochodem, jak to funguje, přizpůsobit výstup odkazů každé konkrétní nabídky.

Dovolte mi nejprve nejprve říci, že přizpůsobení odkazů na primární nebo hlavní nabídku je pro jakékoli tematické téma zásadní, a jediným důvodem, proč si mohu vzpomenout, proč Drupal to tak těžko udělat, je tak profesionální Drupal themers si mohou udržet svou práci!

Viděl jsem řešení pomocí funkce theme_link: špatný nápad, protože to změní výstup VŠECH vašich odkazů, což naruší rozložení vašich stránek.

Můj přístup je proto, že přepíšete funkci topic_menu_link. Přidám podmínku pro použití přepisu pouze v konkrétní nabídce, kterou chci. V tomto příkladu jsem vybral primární odkazy. Chcete-li znát název nabídky, kterou chcete motivovat, musíte vložit dsm ($ proměnné) a použít modul Devel.

function yourtheme_menu_link(array $variables) {

  $element = $variables['element'];
  $sub_menu = '';

// Replace 'menu_link__menu_block__1' with the name of the menu you want to theme.
if ($element['#theme']['0'] == 'menu_link__menu_block__1') {
  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }

  $title = $element['#title'];

// I put the span tags in the title.
  $element['#title'] = '<span class="yourclass1"></span><span class="yourclass2">' . $title . '</span><span class="yourclass3"></span>';
// I tell the l() function to keep the HTML tags.
  $element['#localized_options'] += array(
    'attributes' => array(), 
    'html' => TRUE,
  );
  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}
// The function renders the links from all the other menus without modification.
if ($element['#below']) {
  $sub_menu = drupal_render($element['#below']);
}
$output = l($element['#title'], $element['#href'], $element['#localized_options']);

return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}
2
Taesto

Výsledkem je stejný výsledek než kód zobrazený Taerno a funguje to dobře v Drupal 7.12.

function yourtheme_menu_link(array $variables) {
  $element = $variables['element'];
  $sub_menu = '';

  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }

  $element['#localized_options']['html'] = TRUE;
  $linktext = '<span class="your_class">' . $element['#title'] . '</span>';

  $output = l($linktext, $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

Můžete přidat následující kód, kde "menu_link__menu_block__1" je název vaší nabídky.

if ($element['#theme']['0'] == 'menu_link__menu_block__1') {

}

Název nabídky jsem našel tiskem $element['#theme']['0'] pro mé menu.

Snažím se přidat rozpětí pouze k nadřazenému odkazu, takže budu zveřejňovat příspěvek, až to udělám.

2
Original Scott

Většinu případů, kdy byste předtím potřebovali další rozpětí, lze nyní vyřešit pouze pomocí CSS:

li {
  position: relative;
  padding-left: 25px;
}

li:before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  width: 20px;
  height: 20px;
  background: url('../images/icons.png') no-repeat;
  background-position: 0 0;
}
1
Hans Rossel

Možná vás bude zajímat modul Theme Developer . To vám umožní kliknout na prvky a Drupal stránka), abyste zjistili, která motivová funkce/šablona je vygenerovala, jaké argumenty byly předány, jaké alternativy jsou k dispozici atd.

1
thsutton