Kan er iemand mij helpen bij volgend probleem?
Ik wil een region (mijn hele header) op een bepaalde pagina niet weergeven.
Blocks kan je gemakkelijk hiden, maar de hele region?
Hoe ga ik hier te werk?
Alvast bedankt!
Drupalversie:
7.x
Auteur:
fbreckx
Datum van inzending:
vrijdag 30 maart 2012 - 12:10
Door Kay.be op 30 maart, 2012 - 17:38
Als je een andere template wil voor een bepaalde pagina (bv. www.somesite.com/contact) dan noem je de template page--[name page] (bv page--contact.tpl.php). Kopieer hier in de inhoud van page.tpl.php en zet een // voor print render($page['sidebar_first']);
Clear je cache en refresh de page. De region is nu niet gerenderd op die specifieke pagina.
Ik heb echter nog een probleem. Ik heb een pagina met een overzicht (view) van realisaties.
Op die pagina staat bovenaan een header. Wanneer ik op 1 realisatie klik, wil ik die header weg op die pagina.
Ik kan moeilijk voor elke detailpagina een template gaan maken, niet?
Je werkt met aliassen. Als elke alias waarbij je geen header wil begint met de string "realisatie-" kan je daar gebruikt van maken in je php code van je template page.tpl.php.
$alias = drupal_get_path_alias($_GET['q']);
$aliasarray = explode("/", $alias);
if (!strstr($aliasarray[1], "realisatie-")) {
print render($page['header']);
}
Wat je hier doet is de alia opvragen (een string). Deze explode je naar een array, de explode van de string gebeurt op het karakter "/". In deze array zoek je het tweede resultaat ($aliasarray[1]). Hiervan bekijk je of deze begint met de string "realisatie-" string. Als dat niet zo is (!strstr($aliasarray[1], "realisatie-")) dan render je de region.
Dit is één van de mogelijke oplossingen. Ik garandeer niet dat dit de beste oplossing is. Maar ze zou wel moeten werken.
Als ze niet werkt doe dan in je code een dpm van je array en kijk of $aliasarray[1] wel degelijk je realisatie-xx weergeeft.
Ik krijg nu wel af een toe een error. Bij het navigeren door de pagina's komt er niks, maar de pagina die ik na contact aanklik (mysite.com/contact), geeft volgende error:
Notice: Undefined offset: 1 in include() (regel 145 van /opt/www/xxx/web/xxx.xxxxxx.xx/sites/all/themes/xxx/page.tpl.php).
Notice: Undefined offset: 1 in include() (regel 145 van /opt/www/xxx/web/xxx.xxxxxx.xx/sites/all/themes/xxx/page.tpl.php).
Als ik die weer refresh, is de error weg? Enig idee hoe dat komt?
Heb besloten om highlighted en about (de header eigenlijk) ook niet weer te geven op de overzichtspagina...
Door Kay.be op 2 april, 2012 - 11:39
Ok, dat is omdat op andere pagina's deze arraywaarde niet zal bestaan als er bv geen aliassen zijn of als de array string minder levels heeft dan twee.
check bij je if statement of dat er wel een $aliasarray[1] is.
Ja kan het volgende proberen
if ($aliasarray[1]){
if (!strstr($aliasarray[1], "realisatie-") && !strstr($aliasarray[1], "realisaties")) {
print render($page['highlighted']);
print render($page['about']);
}
}
else{
print render($page['highlighted']);
print render($page['about']);
}
Je zou dan geen meldingen meer mogen krijgen omdat je de code waarop je de waarde checkt niet uitgevoerd wordt als $aliasarray[1] niet bestaat.
P.S.. Als je twee reders uitvoert moet je deze niet concateneren. je kan gewoon het volgende doen:
print render($page['highlighted']);
print render($page['about']);
Dit omdat je in php mode werkt (<?php ... ?>
Laat me weten of de melding weg is.
P.P.S. je kan dan ook gewoon testen of de string begint met "realisaties" ipv "realisaties-".
Ik schreef relatisaties- omdat je misschien de view zelf realisaties noemde en de header hier wel wilde hebben.
?>
Mijn view heet realisaties, maar de detailpagina begint met realisatie (zonder s).
De code werkt dus nu, maar wel nog die error.
Ivm. dat concatenaten, er staat nog wat html voor die render($page['about']), maar dat valt hier blijkbaar weg op forum.
Door Kay.be op 2 april, 2012 - 12:22
Mogelijk krijg je nog een melding op $aliasarray = explode("/", $alias);
Maak hier van:
if ($alias) {
$aliasarray = explode("/", $alias);
}
Dit zou een oplossing kunnen zijn als er geen aliassen zijn en deze melding tevoorschijn komt.
Ik heb het hier even gesimuleerd. Een eigenaardigheidje van Drupal waarop ik niet gelet had :-p
Gebruik bij je check of de variabele bestaat de volgende check:
if (isset($aliasarray[1])) {
...
}
Doe dat ook bij de alias:
if (isset($alias)){
...
}
Is het nodig om dat ook te doen bij die $alias? Werkt ook zonder..
Door Kay.be op 2 april, 2012 - 13:16
Het is altijd een zekerheid. Om te vermijden dat er een foutmelding opgeworpen wordt in de regel die de $alias gebruikt. Je kan het zo laten en afwachten. Als je ooit een melding krijgt op die regel dan kan je nog deze check inbouwen.
Als je een andere template wil voor een bepaalde pagina (bv. www.somesite.com/contact) dan noem je de template page--[name page] (bv page--contact.tpl.php). Kopieer hier in de inhoud van page.tpl.php en zet een // voor print render($page['sidebar_first']);
Clear je cache en refresh de page. De region is nu niet gerenderd op die specifieke pagina.
Kris
Consultant RedTree
www.redtree.be
Super, bedankt!
Ik heb echter nog een probleem. Ik heb een pagina met een overzicht (view) van realisaties.
Op die pagina staat bovenaan een header. Wanneer ik op 1 realisatie klik, wil ik die header weg op die pagina.
Ik kan moeilijk voor elke detailpagina een template gaan maken, niet?
Links zien er nl. altijd zo uit:
http://mysite.com/content/realisatie-1
http://mysite.com/content/realisatie-2
Hoe los ik dit op?
Je werkt met aliassen. Als elke alias waarbij je geen header wil begint met de string "realisatie-" kan je daar gebruikt van maken in je php code van je template page.tpl.php.
$alias = drupal_get_path_alias($_GET['q']);
$aliasarray = explode("/", $alias);
if (!strstr($aliasarray[1], "realisatie-")) {
print render($page['header']);
}
Wat je hier doet is de alia opvragen (een string). Deze explode je naar een array, de explode van de string gebeurt op het karakter "/". In deze array zoek je het tweede resultaat ($aliasarray[1]). Hiervan bekijk je of deze begint met de string "realisatie-" string. Als dat niet zo is (!strstr($aliasarray[1], "realisatie-")) dan render je de region.
Dit is één van de mogelijke oplossingen. Ik garandeer niet dat dit de beste oplossing is. Maar ze zou wel moeten werken.
Als ze niet werkt doe dan in je code een dpm van je array en kijk of $aliasarray[1] wel degelijk je realisatie-xx weergeeft.
Kris
Consultant RedTree
www.redtree.be
Bedankt, ik probeer je oplossing meteen uit!
EDIT: Works like a charm. Thanks!
glad to help :-)
Kris
Consultant RedTree
www.redtree.be
Ik krijg nu wel af een toe een error. Bij het navigeren door de pagina's komt er niks, maar de pagina die ik na contact aanklik (mysite.com/contact), geeft volgende error:
Notice: Undefined offset: 1 in include() (regel 145 van /opt/www/xxx/web/xxx.xxxxxx.xx/sites/all/themes/xxx/page.tpl.php).
Notice: Undefined offset: 1 in include() (regel 145 van /opt/www/xxx/web/xxx.xxxxxx.xx/sites/all/themes/xxx/page.tpl.php).
Als ik die weer refresh, is de error weg? Enig idee hoe dat komt?
Ik heb je code wel ietwat aangepast naar:
<?php
$alias = drupal_get_path_alias($_GET['q']);
$aliasarray = explode("/", $alias);
if (!strstr($aliasarray[1], "realisatie-") && !strstr($aliasarray[1], "realisaties")) {
print render($page['highlighted']);
print "". render($page['about']) . "";
}
?>
Heb besloten om highlighted en about (de header eigenlijk) ook niet weer te geven op de overzichtspagina...
Ok, dat is omdat op andere pagina's deze arraywaarde niet zal bestaan als er bv geen aliassen zijn of als de array string minder levels heeft dan twee.
check bij je if statement of dat er wel een $aliasarray[1] is.
Ja kan het volgende proberen
if ($aliasarray[1]){
if (!strstr($aliasarray[1], "realisatie-") && !strstr($aliasarray[1], "realisaties")) {
print render($page['highlighted']);
print render($page['about']);
}
}
else{
print render($page['highlighted']);
print render($page['about']);
}
Je zou dan geen meldingen meer mogen krijgen omdat je de code waarop je de waarde checkt niet uitgevoerd wordt als $aliasarray[1] niet bestaat.
P.S.. Als je twee reders uitvoert moet je deze niet concateneren. je kan gewoon het volgende doen:
print render($page['highlighted']);
print render($page['about']);
Dit omdat je in php mode werkt (<?php ... ?>
Laat me weten of de melding weg is.
P.P.S. je kan dan ook gewoon testen of de string begint met "realisaties" ipv "realisaties-".
Ik schreef relatisaties- omdat je misschien de view zelf realisaties noemde en de header hier wel wilde hebben.
Kris
Consultant RedTree
www.redtree.be
Ik heb nu volgende code, en krijg de error nog maar 1 keer ipv 2:
<?php
$alias = drupal_get_path_alias($_GET['q']);
$aliasarray = explode("/", $alias);
if ($aliasarray[1]){
if (!strstr($aliasarray[1], "realisatie")) {
print render($page['highlighted']);
print "" . render($page['about']) . "";
}
}
else{
print render($page['highlighted']);
print "" . render($page['about']) . "";
}
?>
Mijn view heet realisaties, maar de detailpagina begint met realisatie (zonder s).
De code werkt dus nu, maar wel nog die error.
Ivm. dat concatenaten, er staat nog wat html voor die render($page['about']), maar dat valt hier blijkbaar weg op forum.
Mogelijk krijg je nog een melding op $aliasarray = explode("/", $alias);
Maak hier van:
if ($alias) {
$aliasarray = explode("/", $alias);
}
Dit zou een oplossing kunnen zijn als er geen aliassen zijn en deze melding tevoorschijn komt.
Kris
Consultant RedTree
www.redtree.be
Foutmelding komt op deze regel.
if ($aliasarray[1]){
Met deze code krijg ik nog steeds een error.
<?php
$alias = drupal_get_path_alias($_GET['q']);
if ($alias) {
$aliasarray = explode("/", $alias);
}
if ($aliasarray[1]){
if (!strstr($aliasarray[1], "realisatie")) {
print render($page['highlighted']);
print "" . render($page['about']) . "";
}
}
else{
print render($page['highlighted']);
print "" . render($page['about']) . "";
}
?>
Ik heb het hier even gesimuleerd. Een eigenaardigheidje van Drupal waarop ik niet gelet had :-p
Gebruik bij je check of de variabele bestaat de volgende check:
if (isset($aliasarray[1])) {
...
}
Doe dat ook bij de alias:
if (isset($alias)){
...
}
Kris
Consultant RedTree
www.redtree.be
Super, thanks! Hiermee werkt het:
<?php
$alias = drupal_get_path_alias($_GET['q']);
$aliasarray = explode("/", $alias);
if (isset($aliasarray[1])){
if (!strstr($aliasarray[1], "realisatie")) {
print render($page['highlighted']);
print "" . render($page['about']) . "";
}
}
else{
print render($page['highlighted']);
print "" . render($page['about']) . "";
}
?>
Is het nodig om dat ook te doen bij die $alias? Werkt ook zonder..
Het is altijd een zekerheid. Om te vermijden dat er een foutmelding opgeworpen wordt in de regel die de $alias gebruikt. Je kan het zo laten en afwachten. Als je ooit een melding krijgt op die regel dan kan je nog deze check inbouwen.
Kris
Consultant RedTree
www.redtree.be
Even deze topic nog eens bovenhalen. Klant wil nu dat region met header op nog tal van andere pagina's onzichtbaar is. Ik probeer het volgende:
<?php
$alias = drupal_get_path_alias($_GET['q']);
$aliasarray = explode("/", $alias);
if (isset($aliasarray[1])){
if (!strstr($aliasarray[1], "realisatie") && !strstr($aliasarray[1], "nieuws") && !strstr($aliasarray[1], "verandas") && !strstr($aliasarray[1], "materialen") && !strstr($aliasarray[1], "geschiedenis") && !strstr($aliasarray[1], "showroom") && !strstr($aliasarray[1], "contact")) {
print render($page['highlighted']);
print "" . render($page['about']) . "";
}
}
else{
print render($page['highlighted']);
print "" . render($page['about']) . "";
}
?>
Op die pagina's wordt de header niet meer weergegeven, maar ook niet op de homepage bv.
Hoe los ik dit op?
Nvm,
if ($is_front) {
print render($page['highlighted']);
print "" . render($page['about']) . "";
}
}
else{
print render($page['highlighted']);
print "" . render($page['about']) . "";
}
Dit werkt!