Lägga till extra contextuella länkar till vyer och block

Events happening in the community are now at Drupal community events on www.drupal.org.
SpiffBB's picture

Jag vill ha några IF-satser för att kontolera att det är ett visst specifikt block eller vy i min template.php som jag påverkar. Men jag får inte till någon IF-sats som fungerar - den släpper igenom alla block eller inga block alls. Har försökt olika varianter på if (isset(....
Skulle bli glad för någon ledtråd på hur man skriver IF-satser som fungerar i temats template.php i D7.
/O

Comments

Template.php is not the right

carlmcdade's picture

Template.php is not the right starting point for what you are trying to do. You need to find the function or template responsible for the output you want to change. Then you can override that function in template.php or create a template that contains your if statement.

Som Carl skriver ovan så

pontus_nilsson's picture

Som Carl skriver ovan så behöver du lägga till din logik i någon template funktion. Kan du förklara lite mer vad det är du önskar göra på din vy eller block? Med en bättre förklaring kan vi finna ut mer exakt vilken funktion du bör titta på.

Det kan vara någon av dessa funktioner du är ute efter template_preprocess_views_view template_preprocess_block.

//Pontus Nilsson, Digitalist

Tack för svar! Jag har alltså

SpiffBB's picture

Tack för svar! Jag har alltså några block och views som jag vill lägga till extra menyval/tabbar till (alltså utöver "edit view" etc som redan finns). Dessa nya menyval/tabbar vill jag ska ligga i kugghjulet för den som har adminbehörighet.

Jag har tittade på: http://drupal.org/node/1089922 som jag aldrig fick att fungera. Däremot fanns en länk till: http://bleen.net/blog/easier-way-add-contextual-links-drupal-7 som fungerade bättre. Där finns exempelkoden:
$element['#links']['mymodule'] = array(
'title' => 'Google',
'href' => 'http://www.google.com',
);
Och den fungerar jättebra både i custom-modul och det var den kod som jag sen "fuskade" och lade direkt i template.php. Däremot får jag inte exemplets IF-sats att fungera: if (isset($element['#block']) && $element['#block']->module == "search"){

Har tittat på länkarna ovan. Är det alltså så att jag ska lägga koden i en block.tpl.php och i variables reglera vilka block som koden påverkar?
/Oscar

Är det block systemet som

pontus_nilsson's picture

Är det block systemet som skriver ut innehållet eller Panels?

Installera Devel och lägg till dpm($element); precis innan if-satsen så kan du se om $element['#block'] finns i arrayen och om $element['#block']->module är search.

function MYMODULE_contextual_links_view_alter(&$element, &$items) {
  // This hook is called for EVERY set of contextual links
  // on a page.  We first want to check the $element to make
  // sure we are adding a link to the correct list of contextual
  // links. In this case we only want to add a link to blocks
  // created by the "search" module. We just add links using the
  // same array structure as is used by theme_links.
  if (isset($element['#block']) && $element['#block']->module == "search"){
    $element['#links']['mymodule'] = array(
      'title' => 'Google',
      'href' => 'http://www.google.com',
    );
  }
}

//Pontus Nilsson, Digitalist

Tackar! Det stämde inte helt

SpiffBB's picture

Tackar! Det stämde inte helt med hur det såg ut i arrayen. Egentligen var det bara ett par views jag ville träffa och det löstes via en inte så snygg sats, exempel:
if($_GET['q'] == 'vanliga-fragor' && ($element['#element']['#type'] !== 'markup')){
$element['#links']['mymodule4'] = array(
'title' => 'Redigera listan',
'href' => 'http://www.bostadsrattsnamnden.se/vanliga-fragor-edit',
);
}
Det jag vill åstakomma är att EN viss view ska få en viss länk:
Första delen kollar att vi är på URL:en där jag har en view som jag vill lägga till en länk på (så att inga andra views får länken).
Andra delen ser till att blocken som råkar ligga på den URL:en inte får den extra länken.

Finns det någon likande dpm($element); för views? Tänker att enkelt få ut värden så att jag direkt kan precisera vilken views det ska träffa utan min klumpiga omväg.
/Oscar

Så här lägger du till

pontus_nilsson's picture

Så här lägger du till contextual links till view (läggs i template.php)

/**
* Implements template_preprocess_views_view().
*/
function MYTHEME_preprocess_views_view(&$vars) {
  if ($vars['name'] == 'MYVIEWNAME') {   
    $vars['title_suffix']['contextual_links']['#contextual_links']['views'] = array(MYLINK);
  }
}

där MYLINK är t.ex. 'node/add'

Länken du vill lägga till måste ha ett context som MENU_CONTEXT_INLINE.
Om det behövs ändras så görs det i en custom modul och i hook_menu_alter().

Exempel

/**
* Implements hook_menu_alter().
*/
function MYMODULE_menu_alter(&$items) { 
  $items['admin/content/promo/%pm_arg']['_tab'] = TRUE;
  $items['admin/content/promo/%pm_arg']['tab_parent'] = 'admin/content';
  $items['admin/content/promo/%pm_arg']['context'] = MENU_CONTEXT_INLINE;
}

Se exempel och mer förklaring här.

//Pontus Nilsson, Digitalist

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: