Hallo
Ich habe mit dieser Anleitung (http://www.simplemachines.org/community/index.php?topic=124248.0) eine eigene Seite für mein SMF-Forum erstellt. Das Problem vor dem îch stehe, ist, wie kann ich den Link zu dieser Seite für unsere Mitglieder sichtbar machen aber für unsere Gäste soll sie zwecks Missbrauch unsichtbar gemacht werden. Beim phpBB2 hab es ein <!-- BEGIN switch_user_logged_in --> Code. Aber wie mache ich das bei SMF? Der Link soll in der Board Naviagtion (menubox) eingebaut werden.
Danke für Hilfe!
MfG
Andy42
per isallowed kann man sich die Berechtigungen selber erstellen.
Auch für Subaktionen wie action=bla;sa=blu ...
mediman
Lainaus käyttäjältä: mediman - marraskuu 05, 2006, 06:01:04 AP
per isallowed kann man sich die Berechtigungen selber erstellen.
??? öh? mal für blöde?! Ich bin auch neu...
Du legst in der Subs.php die entsprechdne Berechtigung fest (den Name dafür) und fragst dann per isallowed('<deinberechtigungsname>') diese Berechtigung für das Mitglied ab, das gerade diese Seite aufruft.
Lainaus käyttäjältä: Dark_Neakro - marraskuu 05, 2006, 07:16:58 AP
Du legst in der Subs.php die entsprechdne Berechtigung fest (den Name dafür) und fragst dann per isallowed('<deinberechtigungsname>') diese Berechtigung für das Mitglied ab, das gerade diese Seite aufruft.
Danke erst Mal!
Wenn du uns in Form eines Beispiel helfen könntest, dann wären wir dir sehr dankbar und wo der Code platziert werden muss um keine Fehlermeldung auszulösen! Denn soviel PHP-Kenntnis habe ich nicht.
OK sorry es ist die ManagePermissions.php :-[
Aber so geht es (nur für die deutsche Sprache):
Suche nach:
'profile_remote_avatar' => false,
),
Füge danach ein:
'ownpage' => array(
'see_site' => false
),
Jetzt die Sprachdateien anpassen:
Suche nach:
$txt['permissions_title'] = 'Berechtigungen editieren';
$txt['permissions_modify'] = 'Ändern';
$txt['permissions_access'] = 'Zugriff';
$txt['permissions_allowed'] = 'Erlaubt';
$txt['permissions_denied'] = 'Verboten';
Füge davor ein:
$txt['permissionname_see_site'] = 'Eigene Seite anschauen';
$txt['permissionhelp_see_site'] = 'Dies ist die Berechtigung fuer deine Seite. Wer diese Berechtigung hat sollte auf deine Seite zugreifen koennen, soweit die Abfrage richtig platziert ist.';
Jetzt muss du folgenden Code so in dem Quellcode deiner Seite plazieren, dass man unbedingt diese abfarge über sich ergehen lassen muss (ambesten in einer if-Abfrage):
isallowed('see_site')
Danke! :)
Ich habe den Code im ManagePermissons.german.php erweitert, so habe ich auch einen Titel:
$txt['permissiongroup_ownpage'] = 'Eigene Seite';
$txt['permissionname_see_site'] = 'Eigene Seite anschauen (nur Mitglieder)';
$txt['permissionhelp_see_site'] = 'Dies ist die Berechtigung fuer deine Seite. Wer diese Berechtigung hat sollte auf deine Seite zugreifen koennen, soweit die Abfrage richtig platziert ist.';
Doch wo und wie baue ich den Code jetzt ein so wie du das gedacht hast?
isallowed('see_site')
An diesem Beispiel am besten, da auch ich diese Files (nur anders benannt) verwende, um das Forumlar zu laden.
Portal.php
<?php
if (!defined('SMF'))
die('Hacking attempt...');
function PortalIndex()
{
global $txt, $scripturl, $db_prefix, $modSettings, $user_info, $context;
loadTemplate('Portal');
// Link tree....
$context['linktree'][] = array(
'url' => $scripturl . '?action=portal',
'name' => "Portal"
);
$context['page_title'] = "Portal";
}
?>
Portal.template.php
<?php
function template_main()
{
global $context, $settings, $options, $txt, $scripturl;
echo '
<table width="100%" border="0" cellspacing="0" cellpadding="3" align="center">
<tr>
<td>', theme_linktree(), '</td>
</tr>
</table>
<!-- hier kommt dann dein HTML Code -->
';
}
?>
Versuch mal das:
<?php
if (!defined('SMF'))
die('Hacking attempt...');
function PortalIndex()
{
global $txt, $scripturl, $db_prefix, $modSettings, $user_info, $context;
if(!allowedTo('see_site'))
die('No Permission...');
loadTemplate('Portal');
// Link tree....
$context['linktree'][] = array(
'url' => $scripturl . '?action=portal',
'name' => "Portal"
);
$context['page_title'] = "Portal";
}
?>
Mir ist jetzt aber die korrekte Fehlerbehandlung bei nichterlaubten Zugriffen von SMF entfallen. Deshalb etwas brutal mit die().
.... ;D schon etwas brutal der die() Code. Funktioniert, auch wenn es nicht gerade die feine Art ist. Leere Seite mit der Zusatzinfo.
Mein Ziel wäre es, das Headline und Footer trotzdem angezeigt wird inkl. einer "Fehlermeldung" in der mitte wie sie man sie bei SMF gewohnt ist. Hättest du da was in der Trickkiste?
Wäre nett, wenn mir jemand dabei helfen könnte eine angenehmere Lösung zu finden, als die brachiale Variante. :) Danke!
MfG
Andy42
Ein Mitglied (der sich mit PHP-Programmierung etc. etwas auskennt) aus unserem Forum hat mir - auf meine Anfrage - den richtigen Tipp gegeben.
Anstatt....
if(!allowedTo('see_site')
die('No Permission...');
.... soll ich diesen Code nehmen...
if ($user_info['is_guest'])
is_not_guest();
... und schon habe ich das gewünschte Ergebnis. Denn der Gast, der das Formular anschauen will, muss sich entweder einloggen oder registrieren.
MfG
Andy42
Lainaus käyttäjältä: Andy42 - marraskuu 06, 2006, 05:32:13 IP
Ein Mitglied (der sich mit PHP-Programmierung etc. etwas auskennt) aus unserem Forum hat mir - auf meine Anfrage - den richtigen Tipp gegeben.
Anstatt....
if(!allowedTo('see_site')
die('No Permission...');
.... soll ich diesen Code nehmen...
if ($user_info['is_guest'])
is_not_guest();
... und schon habe ich das gewünschte Ergebnis. Denn der Gast, der das Formular anschauen will, muss sich entweder einloggen oder registrieren.
MfG
Andy42
Der Code erfüllt für externe Seiten sicher seinen Zweck, aber so vergibt man sich die Chance auf guten, schnellen Code.
SMF hat eine saubere Trennung zw. Design (Template) und Funktion (Sources), dass sollte man auch nutzen.
Berechtigungen, die im Admincenter auch definierbar sind, lassen sich mit der Guestabfrage jedenfalls nicht realisieren.
Mir iste jetzt wirklich entfallen, wie die Fehlerbehandlung von SMF für diese Situation aussieht. Aber mediman hat Recht. Es ist nicht gerade fleixbel und/oder schnell ;)
Mag ja alles stimmen. Doch der guest-Code erfüllt seinen Zweck, ähnlich wie ich es eigentlich haben wollte, und die Berechtigung dazu lässt sich im Admincenter aktivieren/deaktivieren. Wenn auch leider nicht für einzelne externe Seiten, was vermutlich reiner Luxus wäre.
Wenn es einen besseren Vorschlag gibt als der meinen und SMF-Freundlicher ist, dann verwende ich ihn gerne - bin immer offen für Neues. Aber der "Brachialvorschlag" von Dark_Neakro war leider nicht zufriedenstellend und es kam bis jetzt von seitens SMF auch keine weitere Vorschläge. ;)
MfG
Andy42