Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Anzeigen von Inhalten für anonymous User...

Eingetragen von fh (153)
am 27.12.2009 - 16:03 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Hallo zusammen,

letzte Woche habe ich wieder etwas geschrieben, bin aber nicht so ganz zufrieden, bzw. möchte wenn möglich weniger PHP aber mehr Drupal Funktionen nutzen.

Sorry für das Englisch, wenn ich dieses Modul vielleicht mal der Community vorstelle, so wird der Text noch angepasst. Einige "titel-callbacks" für die t() Funktionen fehlen noch. Gerne hätte ich grundsätzlich gewusst, was hier möglich ist und wo ich Mist geschrieben habe (auch wenn es funktioniert).
Es geht um nicht angemeldete Benutzer, welche Inhalte trotz fehlender Rechte für einige Male ansehen können. Die Inhalte basieren auf allen möglichen Nodes, dabei kann man gewisse Inhaltstypen freigeben. Berechtigungen habe ich keine gesetzt, was auch schwer sein dürfte für nicht zugelassene Inhalte und nicht angemeldete User.
Funktionieren tut das ganze ja, aber mir wäre doch wohler, wenn ich eure Meinung dazu hören könnte.

Danke schon im Voraus und allen jetzt schon ein erfolgreiches 2010.

accesscounter.module:

<?php
/**
* Implementation of hook_menu()
*/
function accesscounter_menu() {
 
$items['admin/settings/accesscounter'] = array(
   
'title' => 'Accesscounter',
   
'description' => t('Configure counts for access of any Content, which is by default not allowed.'),
   
'page callback' => 'drupal_get_form',
   
'page arguments' => array('accesscounter_admin_settings'),
   
'access arguments' => array('administer site configuration'),
   
'type' => MENU_NORMAL_ITEM,
   
'file' => 'accesscounter.admin.inc',
  );
 
$items['admin/settings/accesscounter/count'] = array(
   
'title' => 'Access count',
   
'description' => t('How often, a content type have allow access'),
   
'page callback' => 'drupal_get_form',
   
'page arguments' => array('accesscounter_count_admin_settings'),
   
'access arguments' => array('administer site configuration'),
   
'type' => MENU_NORMAL_ITEM,
   
'file' => 'accesscounter.admin.inc',
  );
  return
$items;
}

/**
* Implementation of hook_nodeapi()
*/
function accesscounter_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  global
$user;
 
$options = variable_get('accesscounter_node_types', array());
  foreach(
$options as $opt => $value) {
    if(
$op == 'view' && $value == $node->type && $value != FALSE) {
       
$countst = variable_get("accesscounter_node_count_$value", '');
       
$mytyp = 'an' . $value;
      if (
$user->uid == 0 && !isset($_COOKIE["$mytyp"]) && !isset($_COOKIE["full$mytyp"])) {
       
$values = $_SERVER['REMOTE_ADDR'] . ' ' . date("d.m.Y H-i") . ' ' . 1;
       
setcookie($mytyp, $values);
      } else if(
$node->type == $value && isset($_COOKIE["$mytyp"]) && $user->uid == 0 && !isset($_COOKIE["full$mytyp"])) {
       
$val = $_SERVER['REMOTE_ADDR'];
       
$datetm = date("d.m.Y H-i");
       
$value = $_COOKIE["$mytyp"];
       
$cnt = trim(substr($value, -2));
       
// bei der IP möchte ich noch nachbessern und auch die momentane IP mit dem Cookie vergl.
       
$ip = strtok($value, ' ');
       
$values = $val . ' ' . $datetm . ' ' . ($cnt + 1);
       
setcookie($mytyp, $values);
      }
      if (
$countst <= $cnt && $user->uid == 0) {
       
$full = 'full' . $mytyp;
       
setcookie($full);
      }
      if(isset(
$_COOKIE["full$mytyp"])) {
        unset(
$_COOKIE["$mytyp"]);
       
accesscounter_gtoregister();
      }
    }
  }
}

/**
* Call Function, if Cookie 'full...' is setting.
*/
function accesscounter_gtoregister() {
drupal_set_message(t("Please register! Access for this Type is expired!"));
 
drupal_goto('/user/register');
}
?>

accesscounter.admin.inc:

<?php
/**
* Callback of hook_menu()
* for content types allow
*/
function accesscounter_admin_settings()  {
 
$options = node_get_types('names');
 
$form['accesscounter_node_types'] = array(
   
'#type' => 'checkboxes',
   
'#title' => t('Allow some content for anonymous user.'),
   
'#options' => $options,
   
'#default_value' => variable_get('accesscounter_node_types', array('')),
   
'#description' => t('Here, you can set which node types are allowed for anonymous user.'),
  );
    return
system_settings_form($form);
}

function
accesscounter_count_admin_settings()  {
 
$options = variable_get('accesscounter_node_types', array());
  foreach(
$options as $opt => $value) {
    if(
$value != FALSE) {
     
$form["accesscounter_node_count_$opt"] = array(
       
'#type' => 'select',
       
'#title' => t('Node type = @opt', array('@opt' => $opt)),
       
'#options' => array(0 => 'not set', 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 8 => 8, 10 => 10,15 => 15, 20 => 20, 30 => 30, 50 =>50, 75 => 75, 100 => 100, 200 => 200),
       
'#default_value' => variable_get("accesscounter_node_count_$opt", '0'),
      );
    } else if(
$value == FALSE) {
     
drupal_set_message(t('Typ: @value is not active!', array('@value' => $opt)));
     
variable_del("accesscounter_node_count_$opt");
    }
  }
  return
system_settings_form($form);
}
?>

Das ist es schon, ich möchte auch die Userprofile noch einfügen. Dazu habe ich mir gedacht, dass ich mich einfach in den Menüpfad der Profilanzeige einklinke, in etwa profile/%, oder wie der Pfad dann genau lautet.
Wird nun ein Profil angesehen, so könnte ich auch da ein Cookie setzen. Angedacht ist auch noch eine Drupal Tabelle, damit auch die IP gespeichert werden kann, ev. sollten alle IP Adressen in den Cookies sein, damit Änderungen in der DB berücksichtigt werden...

Gruss und danke für die wertvollen Hinweise!

Fredi

‹ [gelöst] mymodule_schema_alter(), aber Werte nicht im node-Object Bedingt auf Teil eines Moduls zugreifen? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Überschrift bitte anders wählen

Eingetragen von Bogus (319)
am 27.12.2009 - 18:21 Uhr

Hallo ;D

Als erstes, Bitte ändere die Überschrift, weil mit "etwas spiziell" werden nicht soviele User hier antworten. Da keiner genau weiss, was dahintersteckt, ausserdem ist die Suche damit erschwerend.

Zu deinem Modul, wenn ich es richtig verstanden habe, kann man Inhalte freigeben für nicht angemeldetete user. Das heisst, diese Inhalte können nur User mit bestimmten Rechten ansehen. So richtig verstanden ?

Klingt sehr intressant. Werde ich mal die nächsten Tage mal ausprobieren.

Greetings

Bogus

www.LinuxSoftBoard.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Bogus,das Modul ist

Eingetragen von fh (153)
am 28.12.2009 - 08:49 Uhr

Hallo Bogus,

das Modul ist noch nicht ganz fertig, oben habe ich überhaupt eine falsche Aussage gemacht. Da das Modul ja nur für das Cookie mit der Zählung da ist, muss ein Inhalt grundsätzlich für einen User zugelassen sein.
Ob aber jetzt mein Modul diese Inhalte ausgibt, oder das zuständige Modul selber, ist wohl kein grosser Unterschied, erspart mir aber Aufwand.

In groben Zügen ist folgendes möglich, aber auch noch nicht alles ganz sauber getestet.

- Das Modul prüft alle vorhandenen Inhaltstypen (aktivierte).
- Nach der Installation erhält man für jeden Typen (Profile fehlen noch) eine Checkbox.
- Wird ein Typ aktiviert, so kann man eine gewisse Anzahl von Zugriffen zulassen. Wie gesagt, momentan muss ein Typ noch explizit zugelassen sein, weil die Ausgabe vom zuständigen Modul kommt.
- Wird die Anzahl überschritten, kommt einfach eine Message und es wird zur Registrierung umgeleitet.

Es fehlen noch:
Eine Möglichkeit der DB-Speicherung, um IP-s zu speichern, die keine Cookies zulassen. Und dass das Modul am besten selber die Inhalte ausgibt, dann müsste dieser nicht mal zugelassen sein für nicht angemeldete Benutzer. Die Idee kam eigentlich von einem Dritten, der Userprofile nur eine gewisse Anzahl anzeigen lassen wollte. Dies möchte ich noch nachschreiben, indem ich einfach den aufgerufenen Pfad prüfe und das auch als möglichen "Typen" auswählbar mache.

Zuerst wollte ich das mit Aktionen versuchen, empfinde ich aber als ungleich schwerer.

Teilweise bin ich noch unsicher und habe keine grosse Praxis, darum auch die Vorstellung.
Wenn du es ausprobieren möchtest, hier noch die Info Datei. Du kannst diese ja abändern, wie es dir gefällt...

Ich habe erst nach der Veröffentlichung des ersten Beitrages so richtig darüber nachgedacht; das Modul ist noch viel zu unsicher um auf die Welt los gelassen zu werden, Gründe habe ich ja ausgeführt.

Gruss

Fredi

Hier die kleine accesscounter.info

<?php

; $Id$

name = Access counter
description
= An access limiter for content and more ...
core = 6.x
package
= test

?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Morjen ;D Bin leider kein

Eingetragen von Bogus (319)
am 28.12.2009 - 09:01 Uhr

Morjen ;D

Bin leider kein Programmierer, aber ich kann es mal in einem Testumgebung mal installieren. Wollte eh Xampp local installieren und dann einige Sachen da durchprobieren ;D

Greetings

Bogus

www.LinuxSoftBoard.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

froh um Feedback

Eingetragen von fh (153)
am 29.12.2009 - 12:39 Uhr

Hallo Bogus,

danke ich bin immer froh um Feedback. Ich muss einiges noch verbessern, habe die Arbeit unterschätzt :-)

Gruss

Fredi

EDIT: Ich mache jetzt erstmal das Modul für alle Nodetypen sauber fertig. Es kommt eine DB-Tabelle hinzu, welche die IP-Adressen auch nochmals erfasst und ggf. ein Cookie erneuern kann. - bzw. ein Cookie den "Zustand" in der DB erneut "abspeichern" kann.
Das ist noch recht komplex ... aber interessant.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 3 Tagen
  • Hey danke
    vor 2 Wochen 4 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 4 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 2 Tagen
  • Da scheint die Terminologie
    vor 3 Wochen 2 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 6 Tagen
  • In der entsprechenden View
    vor 3 Wochen 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 6 Tagen
  • gelöst
    vor 6 Wochen 3 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 4 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20457

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 22 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association