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

[gelöst] Preismodell für 3 Benutzerrollen: Free, Premium und Corporate

Eingetragen von pyretta (171)
am 18.07.2017 - 16:39 Uhr in
  • Modulsuche
  • Drupal 7.x oder neuer

Hallo,

gibt es ein Modul für Drupal 7 welches das Rollensystem insofern erweitert, dass auch ein Preismodell daran geknüpft werden könnte?
Beispiel: https://de.statista.com/statistik/accounts/

Also es gibt zum Beispiel 3 Benutzerrollen: Free, Premium und Corporate

Free darf nach Anmeldung/Registrierung pro Monat 100 Seitenaufrufe in bestimmten nicht öffentlichen Bereichen generieren.
Premium darf 1000 Seitenaufrufe generieren,
und Corporate ist unbegrenzt.

Schick wäre dabei, dass dem Nutzer die bereits generierten Seitenaufrufe auf der Profilseite angezeigt werden - vielleicht wie ein Countdowntimer, so dass er informiert ist wie viele Seitenaufrufe er noch generieren darf. Auch eine Warnung z.B. bei Erreichen von 80% des jeweiligen Seitenaufrufkontingents wäre nett.

Außerdem sollte der Nutzer während der Registrierung wählen dürfen für welche Kontenart (Free, Premium und Corporate) er sich anmelden möchte.
Bei Free könnte das Standardprozedere eingestellt bleiben (E-Mail Bestätigungscode) nur bei den kostenpflichtigen Konten müsste der Admin die Nutzer erst freischalten.

Geht so etwas? Gibt es da bereits ein Modul?

Oder vielleicht kann man mit einem Mix aus verschiedenen Modulen etwas ähnliches erreichen? Vielleicht irgendwie in Kombination mit den Statistik-Modulen?
Die Abrechnung muss nicht unbedingt wie in einem eCommerce direkt im System geregelt werden.

Freue mich über eure Anregungen.
Vielen Dank.

‹ [gelöst] Wie kann ich blind links auf meiner Website finden? [gelöst] Preismodell für 3 Benutzerrollen: Free, Premium und Corporate ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: Free darf nach

Eingetragen von Jenna (1883)
am 19.07.2017 - 10:21 Uhr
Zitat:

Free darf nach Anmeldung/Registrierung pro Monat 100 Seitenaufrufe in bestimmten nicht öffentlichen Bereichen generieren.

Prinzipiell kannst du die Anforderungen mit Drupal und Zusatzmodulen umsetzen (Rollenbasiert und ein Ereignis auslösen z.B. mit Rules, verschiedenen Inhaltstypen nach Rolle etc.)

Aber dein Angehen per Seitenaufruf ist nicht wirklich umsetzbar, (meiner Meinung nach).

Wie willst du das steuern? Wenn ein User den Backbutton betätigt oder eventuell eine Suche oder kurz auf sein Konto geht, wäre jedesmal ein Aufruf verbraucht.
Du müßtest also auch noch nach angezeigtem Inhalt berechnen und nach Rolle und versehentliche zurück Klicks oder Page reload rausrechnen?
Oder der User speichert sich eine Node als Favorit im Browser, und ruft die erneut auf, weil er glaubt er hat ja dafür schon bezahlt, was dann?
Das wird grausam unübersichtlich, selbst wenn man das hingebastelt bekommt.

Ich würde anders rangehen, mit einer Art Punktesystem. Beispiel Datingplattformen: Free darf 10 Kontakte ansehen, Premium 50.... usw., Free darf 3 Anfragen versenden, Premium 10 Anfragen.
Dann können die User z.B. Punkte über den Shop kaufen und innerhalb eines gesetzten Zeitraumes verbrauchen.

Grüße Jenna

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Jenna, vielen Dank für

Eingetragen von pyretta (171)
am 19.07.2017 - 13:59 Uhr

Hallo Jenna,

vielen Dank für deine wirklich gute Anregung. Das mit dem Punktesystem klingt gut.
Aber recht kompliziert in der Umsetzung, oder denke ich einfach nur zu kompliziert? Weil, wenn ich das richtig verstehe, muss das System dann nicht nur zählen ob ein Kontakt aufgerufen wurde, sondern auch, ob der Aufruf zum ersten mal stattfand oder eine "Wiederholungstat" ist. Erneute Seitenaufrufe des gleichen Kontakts dürften ja nicht gezählt werden, nur Aufrufe "neuer" Kontakte, um zählen zu können wieviele unterschiedliche Kontakte angesehen wurden.

Gibt es denn da ein Modul, das etwas ähnliches bereits umsetzen könnte?

Ich habe schon einen kleinen Ansatz über DB-Abfragen der Statistik-Tabelle "accesslog", wo ich die uid und den timestamp nach Jahr & Monat gruppiere und die Seitenaufrufe spezieller Bereiche (gefiltert in den Feldern url, path, title) zählen lasse.

Bin nur noch am überlegen, wie ich den User für den Rest des Monats aussperre, wenn er sein Kontingent verbraucht hat, so dass er nur noch Bereiche der Website betrachten kann, für die keine Anmeldung notwendig ist. So als wäre er nicht auf der Website registriert/angemeldet. Bricht der neue Monat an, soll auch sein neues Kontingent anfangen und er sich wieder normal anmelden können.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ein fertiges Modul gibt es

Eingetragen von Jenna (1883)
am 19.07.2017 - 15:40 Uhr

Ein fertiges Modul gibt es meines Wissens nicht, das wäre auch kaum möglich, da es viel zu viele unterschiedliche Anforderungen gibt.

Das meiste kannst du mit Rules umsetzen > Aktion soll sein... wenn Bedingung ist... da hast du etliche Möglichkeiten z.B. einen Wert zu setzen oder ähnliches.

Du kannst auch versuchen dieses Modul abzuwandeln, in dem du die Clicks den Users zuordnest und damit auch jeder Click gezählt wird.
https://www.drupal.org/project/link_click_count

Ebenso könnte man auch Flag einsetzen, es gibt sehr viele Wege so etwas umzusetzen und mehrere Module die jeweils für einen bestimmten Abschnitt eingesetzt werden können.

Der Aufwand für diese Art Umsetzung kann leicht einige Wochen oder mehr Zeit in Anspruch nehmen.
Gerade zu Rules gibt es unendlich Tutorials für die verschiedensten Anforderungen, kostet eben viel Zeit sich dort einzuarbeiten und zu testen.

Grüße Jenna

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nur für den Fall, dass jemand

Eingetragen von pyretta (171)
am 08.08.2017 - 11:12 Uhr

Nur für den Fall, dass jemand ein ähnliches Projekt hat: Ich konnte es zwischenzeitlich umsetzen.
Habe mich an Jenna's wirklich guten Vorschlag mit dem Punktesystem gehalten. Das ist tatsächlich besser umsetzbar. Nochmal vielen herzlichen Dank dafür, Jenna! :-)

Für die Umsetzung benötigt man folgende Module:

  • Rules
  • Entity API
  • Address Field (addressfield)
  • Drupal Commerce
  • Commerce Credits

Für das Gutschreiben eines Credits benötigt man ein wenig PHP-Kenntnisse, um die dafür geeignete Rule zu erstellen.
Überhaupt läuft in diesem System fast alles im Modul "Rules" ab.

Hier mal mein Lösungsweg, wie ich die Credits pro User gutgeschrieben habe, die er sich gekauft hat:
Event: "Completing the checkout process"
Conditions

  • 1: Order contains products of particular product types
    Parameter: Reihenfolge: [commerce_order], Product type(s): Commerce Credits
  • 2: Credit is of type
    Parameter: Credit to check: credit, Credit type: DEIN_CREDIT_TYPE

Action: (Hier kommt jetzt der PHP-Code zum Einsatz)
Entity: Add credits to entity => (Data selector) commerce-order:owner
Credit type: Credit type to be added => (Value) DEIN_CREDIT_TYPE
Number of credits: Number of credits that should be added => (Data selector) commerce-order:order-id
PHP evaluation (Enter PHP code without ?php ? delimiters that returns the processed value. The selected value is available in the variable $value. Example: return $value + 1;)

<?php

$order
= commerce_order_load($value);
$order_id = $order->order_id;
$entity_id = db_query('SELECT cp.product_id FROM commerce_line_item AS cli INNER JOIN commerce_product AS cp ON cp.sku = cli.line_item_label WHERE cli.order_id = '.$order_id)->fetchField();
$credit_number = db_query('SELECT commerce_credits_number_value FROM field_data_commerce_credits_number WHERE entity_id = '.$entity_id)->fetchField();
$quantity = db_query('SELECT quantity FROM commerce_line_item WHERE order_id = '.$order_id)->fetchField();
$credits_granted = $credit_number * $quantity;
return
$credits_granted;

?>

Außerdem habe ich noch zusätzlich ein eigenes kleines Script in einen Block integriert, das bei einem Seitenaufruf in einem speziellen Bereich einen Credit abzieht. So kann man steuern welcher Seitenbereich betroffen ist, indem man den Block nur da einbindet, wo Credits abgezogen werden sollen.

<?php
 
global $user;
$u_uid = $user->uid;
$credit_number = db_query('SELECT credits FROM commerce_credits WHERE entity_id = '.$u_uid)->fetchField();
if(
$credit_number > 0){
   
$new_credit_number = $credit_number - 1;
   
db_update('commerce_credits')
      ->
fields(array(
       
'credits' => $new_credit_number,
      ))
      ->
condition('entity_id', $u_uid)
      ->
execute();
}else{
   
watchdog('user', 'Credits von %name wurden aufgebraucht', array('%name' => $user->name));
   
drupal_goto('http://www.demodomain.de/bestellseite');
}
//ENDE else
?>

Falls das auf eine bestimmte Rolle eingeschränkt werden soll, dann einfach noch eine If-Schleife drumherum basteln:

<?php

if(in_array("ZahlenderKunde_OderWieDieRolleEbenHeisst", $user->roles)){
//CODE einfügen, wenn Rolle zutrifft
}else{
//CODE einfügen, wenn Rolle nicht zutrifft
}

?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • 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?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Woche 2 Tagen
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Woche 3 Tagen
  • melde mich mal wieder, da ich
    vor 9 Wochen 15 Stunden
  • Hey danke
    vor 9 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 9 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 9 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 9 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 10 Wochen 3 Tagen
  • In der entsprechenden View
    vor 10 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 10 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» 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 24 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