Nicht auf Frontpage bei unregistrierten Benutzer
Eingetragen von Schnittmenge@dr... (288)
am 05.12.2009 - 07:18 Uhr in
am 05.12.2009 - 07:18 Uhr in
Ich möchte ein Block auf allen Seiten anzeigen lassen, nur nicht auf der Startseite für nicht registrierte Benutzer: http://de.consenser.org/
Wie lautet der php Befehl: if (Frontpage) mit if (drupal_is_front_page()) hat es nicht funktioniert?
- Anmelden oder Registrieren um Kommentare zu schreiben
Frontpage
am 05.12.2009 - 15:33 Uhr
Hallo,
Wenn du es für PHPTemplate (tpl.php) schreibst ginge das in etwas so:
<?php if($is_front && !$logged_in): ?>
// Anweisungen ...
<?php endif; ?>
Möchtest du normales PHP benutzen, so geht das so:
<?php
if($is_front && !$logged_in) {
// Anweisungen ...
}
?>
Gruss
Fredi
EDIT: '<' Zeichen vor dem if-Statement entfernt
___________________________________________________________________________
Wenn Frage beantwortet wurde, bitte [gelöst] in den Titeleintrag schreiben.
Wird immer noch angezeigt!
am 05.12.2009 - 13:58 Uhr
Also dieser Code sollte einen Block nicht auf der Startseite für nicht registrierte Benutzer nicht anzeigen.
Kurz: false (PHP-Modus für die Sichtbarkeitseinstellung)
<?php
<if($is_front && !$logged_in) {
return false;
}
?>
Doch ich sehe Ihn weiterhin diesen Block auf der Startseite, obwohl ich nicht eingeloggt bin. Wo kann der Fehler liegen? Muss ich noch irgend etwas zuvor laden, wie bei
global $user;
if ( $user->uid == 0)
sorry ...
am 05.12.2009 - 15:06 Uhr
Hallo,
entschuldige, ich habe dir das falsch ausgesagt.
wie es oben geschrieben war, wird der Artikel nur auf der Frontseite und nicht eingeloggt angezeigt.
Möchtest du es anzeigen, aber nur für registrierte User:
<?php
if($is_front && $logged_in) {
// wird auf der Frontpage angezeigt, aber nur wenn eingeloggt
}
?>
Den User brauchst du nicht anzugeben...
Jetzt sollte es stimmen :-)
Gruss
Fredi
___________________________________________________________________________
Wenn Frage beantwortet wurde, bitte [gelöst] in den Titeleintrag schreiben.
if alleine sagt nichts aus ...
am 05.12.2009 - 15:01 Uhr
Es geht darum, ob die PHP Funktion "false" oder "true" zurück gibt. Womit die if Bedingung nur im Zusammenspiel mit der Anweisung einen Sinn macht. Bei "FALSE" dürfte ich den Block nicht sehen, tue es aber.
Irgend etwas stimmt da noch nicht.
Hallo,Also wenn du jetzt in
am 05.12.2009 - 15:31 Uhr
Hallo,
Also wenn du jetzt in "$is_front"(auf der Frontseite) bist und "$logged_in"(eingeloggt), so bekommst du TRUE zurück, besser gesagt, if bekommt das TRUE.
Bist du nicht auf der Frontpage == FALSE
Bist du nicht eingeloggt == FALSE
Den Code den du ausführen möchtest, könntest du nun in die Anweisung selber stellen:
<?php
if ($is_front && $logged_in) {
// Frontseite und eingeloggt, dann wird das hier ausgeführt
} else {
// ansonsten wird das hier ausgeführt...
}
?>
Du könntest ja auch in dem ersten Block eine Variable setzen, wenn du das Ergebnis woanders benötigst:
<?php
if ($is_front && $logged_in) {
$reultat = TRUE;
} else {
$resultat = FALSE;
}
return $resultat; // gäbe auf Frontseite und eingeloggt TRUE aus, ansonsten FALSE
?>
Jetzt kannst du einfach $resultat abfragen, welches nun entweder TRUE oder FALSE ist. Jetzt muss ich aber doch noch nachfragen, dieses Statement stellst du aber schon in eine tpl.php Datei? Und wenn ja, warum setzt du nicht einfach den Code der "angesehen / nicht angesehen" werden darf auch in die das if? Du könntest so auch ganze Dateien nicht ausgeben lassen, oder halt nur Teile davon.
Vielleicht hilft das jetzt weiter
Gruss
Fredi
EDIT: Ich sehe gerade, dass sich in den ersten Beispielen ein Fehler eingeschlichen hat, darum ev. dass es nicht geht?!
<?php
<if
?>
das < vor dem if muss unbedingt weg!
___________________________________________________________________________
Wenn Frage beantwortet wurde, bitte [gelöst] in den Titeleintrag schreiben.
Sind das variablen für
am 05.12.2009 - 22:27 Uhr
Sind das variablen für Drupal 5?
Also ich habe jetzt verschiedene Versuche gemacht mit negativen Ergebnissen:
Bei diesen Code wird der Block auf allen Seiten angezeigt, auch auf der Startseite!:
<?php
if ($is_front) {
return = FALSE;
} else {
return = TRUE;
}
?>
Auch dieser Code lässt den Block auf allen Seiten erscheinen, egal, ob eingeloggt oder nicht!:
<?php
if ($logged_in) {
return = FALSE;
} else {
return = TRUE;
}
?>
Wo könnte das Problem liegen. Entweder entsprechen die $... D5 nicht, oder der Fehler liegt ganz wo anders.
Dank für Deine Geduld!
Drupal 5, kenn ich kaum ...
am 06.12.2009 - 12:28 Uhr
Hallo,
leider kenne ich mich nicht mit Drupal 5 grossartig aus. Darauf hatte ich auch gar nicht geachtet...
Du könntest ja mal das error_reporting hochsetzen, wenn die Variablen nicht existieren sollten, so bekommst du eine Fehlermeldung.
Das ginge so, wenn du folgenden Code in die verwendete tpl.php reinstellst, oben am Anfang der Seite:
<?php
error_reporting(E_ALL);
?>
Jetzt solltest du einen Fehler angezeigt bekommen, wenn die Variablen nicht existieren, oder sonst etwas nicht stimmt. Wenn diese Variablen keine Fehler verursachen(also vorhanden sind), würde ich auch mal die Ausgabe testen, ev. wird eine andere tpl.php aufgerufen als erwartet. Du könntest hier ja einfach mal so was angeben, am besten direkt über der Ausgabe ...$content...:
<?php
echo "<h2>Dateiname.tpl.php</h2>";
?>
Villeicht geht es damit, denn meines Wissens ist $is_front auch immer eine page...
<?php
if ($page) {
echo "Wir sind in einer Pageausgabe";
}
?>
Wie du den User abfragen kannst, bin ich nun auch nicht ganz sicher.
Ich habe dir hier mal die Liste von den möglichen Variablen in der page.tpl.php, aber für Drupal 6.
/**
* @file page.tpl.php
*
* Theme implementation to display a single Drupal page.
*
* Available variables:
*
* General utility variables:
* - $base_path: The base URL path of the Drupal installation. At the very
* least, this will always default to /.
* - $css: An array of CSS files for the current page.
* - $directory: The directory the theme is located in, e.g. themes/garland or
* themes/garland/minelli.
* - $is_front: TRUE if the current page is the front page. Used to toggle the mission statement.
* - $logged_in: TRUE if the user is registered and signed in.
* - $is_admin: TRUE if the user has permission to access administration pages.
*
* Page metadata:
* - $language: (object) The language the site is being displayed in.
* $language->language contains its textual representation.
* $language->dir contains the language direction. It will either be 'ltr' or 'rtl'.
* - $head_title: A modified version of the page title, for use in the TITLE tag.
* - $head: Markup for the HEAD section (including meta tags, keyword tags, and
* so on).
* - $styles: Style tags necessary to import all CSS files for the page.
* - $scripts: Script tags necessary to load the JavaScript files and settings
* for the page.
* - $body_classes: A set of CSS classes for the BODY tag. This contains flags
* indicating the current layout (multiple columns, single column), the current
* path, whether the user is logged in, and so on.
* - $body_classes_array: An array of the body classes. This is easier to
* manipulate then the string in $body_classes.
*
* Site identity:
* - $front_page: The URL of the front page. Use this instead of $base_path,
* when linking to the front page. This includes the language domain or prefix.
* - $logo: The path to the logo image, as defined in theme configuration.
* - $site_name: The name of the site, empty when display has been disabled
* in theme settings.
* - $site_slogan: The slogan of the site, empty when display has been disabled
* in theme settings.
* - $mission: The text of the site mission, empty when display has been disabled
* in theme settings.
*
* Navigation:
* - $search_box: HTML to display the search box, empty if search has been disabled.
* - $primary_links (array): An array containing primary navigation links for the
* site, if they have been configured.
* - $secondary_links (array): An array containing secondary navigation links for
* the site, if they have been configured.
*
* Page content (in order of occurrance in the default page.tpl.php):
* - $left: The HTML for the left sidebar.
*
* - $breadcrumb: The breadcrumb trail for the current page.
* - $title: The page title, for use in the actual HTML content.
* - $help: Dynamic help text, mostly for admin pages.
* - $messages: HTML for status and error messages. Should be displayed prominently.
* - $tabs: Tabs linking to any sub-pages beneath the current page (e.g., the view
* and edit tabs when displaying a node).
*
* - $content: The main content of the current Drupal page.
*
* - $right: The HTML for the right sidebar.
*
* Footer/closing data:
* - $feed_icons: A string of all feed icons for the current page.
* - $footer_message: The footer message as defined in the admin settings.
* - $footer : The footer region.
* - $closure: Final closing markup from any modules that have altered the page.
* This variable should always be output last, after all other dynamic content.
*
* @see template_preprocess()
* @see template_preprocess_page()
*/
Leider kann ich nicht mehr dazu sagen, in Drupal 5 bin ich nicht so bewandert.
Noch als Anmerkung; wenn du diese Ausgaben für ein Modul benötigst, warum machst du diese Abfragen nicht im Modul selber und könntest mit den Rechten(hook_perm()) arbeiten? Dort könntest du dann wirklich auch den $user in der Funktion direkt erfragen.
Übrigens: das return funktioniert natürlich nur, wenn du dieses if-Statement durch eine Funktion aufrufst, dann erhält diese den Inhalt von return. Ansonsten kannst du das einfach so setzen, oder es mit echo ausgeben.
<?php
if ($is_front && $logged_in) {
// $resultat bekommt jetzt den Wert
$resultat = "ein Wert";
}
?>
Wenn du den Code nicht direkt in dieses if einbindest, so müsste der auszugebende Code so umschlossen werden.
<?php
if (isset($resultat) && ($resultat == "ein Wert") {
// $resultat ist gesetzt und hat den Wert "ein Wert";
} elseif (isset($resultat)) {
// $resultat ist gesetzt
} elseif ($resultat == "ein Wert") { // hier ginge auch -- elseif ($resultat != '') {}
// $resultat hat "ein Wert" zugewiesen bekommen
} else {
// es wurde weder Variable noch ein Wert erkannt.
echo "keine Übereinstimmung:"
}
?>
So, vielleicht nutzt dir das was. Wenn ich mehr über den Kontext wüsste, könnte ich dir vielleicht eher helfen. Vielleicht weiss jemand gut in Drupal 5 Bescheid...
Gruss, hätte gerne mehr geholfen
Fredi
P.S. du hast doch auch für deinen Block eine Rechtemöglichkeit! Wenn du in admin - Strukturierung - Blöcke gehst, kannst du deinen Block doch bearbeiten.
Du solltest diesen Block "bearbeiten" können (hoffe das gibt es in D5) und da kannst du doch angeben, auf welchen Seiten dieser sichtbar sein soll. Hier könntest du ja einfach den zugelassenen Pfad angeben, ev. gibt es auch schon in D5 das "frontpage", oder wenigstens
<front>
. Dazu kannst du angeben, dass Drupal für anonyme User diesen Block nicht anzeigt.Jedenfalls ginge das in D6 auf diese Weise...
EDIT:
Hier der Link zu D5 Template-Variablen, ich habe einfach eine Seite davon genommen, ev. blättern.
http://drupal.org/node/39891
Das $is_front und das $page kannst du so anwenden wie aufgezeigt, aber das $logged_in gibt es anscheinend noch nicht. Vielleicht findest du eine Lösung auf der angegebenen Seite.
Kann mir höchstens deinen Vorschlag vorstellen, dass du wirklich mal "global $user" versuchtst und dann auch wie die anderen Werte abfragst.
<?php
global $user;
if($is_front && $user != 0) {
// ausführen wenn auf Frontseite und nur wenn eingeloggt...
}
?>
ob er das $user annimmt, kannst du ja einfach prüfen:
if(isset($user)) {
echo "User ist gesetzt mit Nummer: $user";
}
___________________________________________________________________________
Wenn Frage beantwortet wurde, bitte [gelöst] in den Titeleintrag schreiben.
GELÖST
am 09.12.2009 - 12:58 Uhr
Was kann man daraus lernen:
1. Die Befehle für php.tpl können anders sein, als die für die Block Aktivierung: drupal_is_front_page()war von Anfang an richtig. Denn Fehler den ich gemacht habe, war dass ich false UND right returnen musste.
2. Die Befehle für Drupal 5 und 6 unterscheiden sich:
D6: §logged_in D5: global $user; if ( $user->uid == 0)
Mein Code für D5, der einen Block auf allen Seiten anzeigt, nur nicht, auf der Startseite für nicht registrierte Benutzer lautet:
<?php
global $user;
if (drupal_is_front_page() && $user->uid == 0) {
return false;
}
else {return true;
}
?>
Fredi, danke für Deine Geduld.
Saludos,
Schnittmenge
gut zu wissen
am 09.12.2009 - 13:23 Uhr
Hallo Schnittmenge,
ich glaube, das ich mich zu wenig genau erkundigte, m.W. ist das $is_front tatsächlich nur für die page...-
und die node...tpl.php verfügbar - habe das nicht bedacht. :-(
Danke für die Rückmeldung, an dem return ... UND "$block" hätte ich mir vielleicht auch mal Probleme eingefangen. Feedback ist immer gut, auch wenn ich nicht helfen konnte.
Gruss
Fredi
___________________________________________________________________________
Wenn Frage beantwortet wurde, bitte [gelöst] in den Titeleintrag schreiben.