You are here

Rules

7 posts / 0 new
Τελευταία δημοσίευση
Rules

Γεια χαρά σε όλη την παρέα,

Θέλω να φτιάξω μια μικρή σελίδα η οποία θα λειτουργεί σαν δανειστική βιβλιοθήκη.
Έχω δημιουργήσει 2 content types: Έναν για τα "Βιβλία" και έναν για τους "Δανειζόμενους".

Εντός του content type "Βιβλια" έχω ένα reference entity πεδίο το οποίο βλέπει τους "Δανειζόμενους" ώστε να μπορώ να κάνω assign στο βιβλίο το ονοματεπώνυμο του δανειζόμενου κτλ.

Μέχρι εδώ όλα καλά...

Αυτό που θέλω να κάνω και δεν μπορώ να βρω πως γίνεται είναι πως να κρατάω ιστορικό. Δηλαδή να μπορώ να δω μέσα σε ένα "βιβλίο" πόσοι το έχουν δανειστεί κτλ. Επίσης να μπορώ να δω μέσα σε έναν "Δανειζόμενο" πόσα βιβλία έχει δανειστεί τι έχει επιστρέψει κτλ.

Προσπάθησα να χρησιμοποιήσω το Rules Module για να δημιουργεί αυτόματα εντός του "Δανειζόμενου" σε ένα πεδίο List μια καταχώρηση κάθε φορά που κάνω assign σε ένα "Βιβλίο" τον "Δανειζόμενο" αλλά δεν μπορώ να τα καταφέρω να δουλέψει.

Γενικά είναι σωστή η λογική που έχω ακολουθήσει ή κάτι μου ξεφεύγει; Καμιά ιδέα πως μπορεί να υλοποιηθεί όλο αυτό;

Σας ευχαριστώ όλους!!!

Drupal version: 
module: 

Θα σου πρότεινα να αλλάξεις τη δομή σου και να βάλεις ένα ενδιάμεσο entity για το δανεισμό. Είτε node type, είτε custom entity.
"Βιβλία" και "χρήστες" θα είναι ανεξάρτητα μεταξύ τους και δεν θα συνδέονται άμεσα.
Το entity/nodetype σου (ας το ονομάσουμε "δανεισμός") θα έχει

  1. Reference field προς τους "χρήστες" (single value)
  2. Reference field προς τα "βιβλία" (single value)
  3. Ένα field για status

Θα πρέπει να είναι revisionable, οπότε μόλις ένας δανεισμός αλλάξει status, τον αποθηκεύεις σε νέο revision.

Έτσι, ψάχνοντας (με μια view?) το σύνολο των "δανεισμών" που έγιναν με reference προς συγκεκριμένο "βιβλίο" ή/και "χρήστη", μπορείς να τραβήξεις τα στατιστικά που θέλεις.
Η χρονική διαφορά μεταξύ των revisions μπορεί να σου δώσει και τη διάρκεια που ο "χρήστης" κράτησε το "βιβλίο".

Η σχέση μεταξύ ενός χρήστη και ενός βιβλίου, aka δανεισμός, έχει από μόνη της μια λειτουργική σημασία, οπότε καλό θα ήταν να φιλοξενηθεί ανεξάρτητα σε μια entity.
Ωστόσο μπορεί να γίνει και με την δομή που έχεις ήδη: μέσω των revisions μπορείς να πάρεις το ιστορικό των τιμών στo reference field σου. Κατά τη γνώμη μου όμως είναι πολύ πιο δύσκολη η υλοποίηση, λιγότερο "καθαρή", και σίγουρα θα σε δυσκολέψει περισσότερο στο μέλλον αν θελήσεις να το επεκτείνεις.

Γεια σου efpapado και σε ευχαριστώ πολύ για την απάντησή σου.
Αυτό που εννοείς λοιπόν, είναι να δημιουργήσω ένα νέο content type ονόματι "Δανεισμός" όπου εκεί με entity reference θα τραβάει τον "Δανειζόμενο" και το "βιβλίο" και θα το καταχωρεί ως νέο Node. Μου φαίνεται πολύ καλή η λογική σου!
Έχω τρεις απορίες:
To field για status που αναφέρεις τί είναι;
Πώς μπορώ να ελέγξω αν από λάθος δώσω στον δανειζόμενο ένα βιβλίο το οποίο είναι ήδη καταχωρημένο σε κάποιον άλλον;
Επίσης πως γίνεται όταν μπαίνω μέσα στο βιβλίο να μου έχει ένα status ότι το συγκεκριμένο βιβλίο έχει δανειστεί στον τάδε κτλ;;;

Σε ευχαριστώ και πάλι!

> To field για status που αναφέρεις τί είναι;

Για να κρατάς το ιστορικό των δανεισμών, τα nodes δεν πρέπει να διαγράφονται όταν τα βιβλία επιστρέφονται.
Θα μπορούσες λοιπόν να βάλεις ένα status με τιμές όπως "ενεργό / ανενεργό". Όταν ο δανεισμός είναι σε εξέλιξη το status είναι "ενεργό", όταν το βιβλίο επιστρέφεται γίνεται "ανενεργό". Το published status μπορεί επίσης να σε βοηθήσει, αλλά είναι boolean και ίσως χρειαστείς περισσότερες τιμές στο μέλλον. Π.χ. ίσως θελήσεις να βάλεις ένα status "καθυστερημένο", ή και "απωλεσθέν". Δεν ξέρω, ιδέες ρίχνω, εσύ ξέρεις τι θέλεις να φτιάξεις :)

> Πώς μπορώ να ελέγξω αν από λάθος δώσω στον δανειζόμενο ένα βιβλίο το οποίο είναι ήδη καταχωρημένο σε κάποιον άλλον;

Τα entity reference fields υποστηρίζουν backreference relationships στις views.
Αν δηλαδή έχεις ένα reference nodetypeA --> nodetypeB
και φτιάχνεις μια view από nodetypeB, μπορείς να προσθέσεις relationship (aka JOIN) με την αντίθετη κατεύθυνση: "Δώσε μου τα nodetypeA nodes που έχουν reference προς τα nodetypeB".
Με τα κατάλληλα filters (κανονικά ή contextual) μπορείς π.χ. να ζητήσεις από τη view σου να σου δώσει "όλα τα Βιβλία, που έχουν backreference προς Δανεισμούς οι οποίοι είναι ενεργοί" κι έτσι έχεις όλα τα δανεισμένα βιβλία.

> Επίσης πως γίνεται όταν μπαίνω μέσα στο βιβλίο να μου έχει ένα status ότι το συγκεκριμένο βιβλίο έχει δανειστεί στον τάδε κτλ;;;

Ομοίως, μια view μπορεί να σου δώσει το αποτέλεσμα.
Αν βάλεις τη view σου σε ένα block, μπορείς μετά να δημιουργήσεις ένα Display Suite block field με αυτή τη view, και να το βάλεις στο Βιβλίο σου.
Το βιβλίο θα πρέπει να υπάρχει ως τιμή contextual filter στη view, και στη ρύθμιση "όταν δεν είναι διαθέσιμο" να βάλεις μια επιλογή που λέει κάτι σαν "πάρε το nid από το url" ή κάπως έτσι.

Είμαι σίγουρος ότι σε μπέρδεψα :D

χαχαχα με μπέρδεψες αλλά είσαι καλός!!!!!
Σε ευχαριστώ!!!!

Ό,τι χρειαστείς ρωτάς :)

Είμαι σίγουρος ότι θα σε ενοχλήσω και πάλι!