Posted by SpiffBB on October 26, 2011 at 4:13pm
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
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.
Carl McDade
Drupal Source Exchange - alpha
Som Carl skriver ovan så
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å
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
Ä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
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
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