Σε ένα ερώτημα λίστας περιεχομένου, μπορείτε να ορίσετε τιμές για ιδιότητες που υπολογίζονται όταν εκτελείται μια σελίδα, για να εμφανίζεται περιεχόμενο που έχει ενημερωθεί πρόσφατα.
Οι περισσότερες ιδιότητες για συστατικά στοιχεία εντός τοποθεσιών είναι στατικές. Ο χρήστης επιλέγει ή καταχωρεί μια σταθερή συμβολοσειρά ή τιμή για μία από τις ιδιότητες του συστατικού στοιχείου και αυτό δεν αλλάζει ανεξάρτητα από το πότε ή πού εκτελείται η σελίδα. Ωστόσο, μπορείτε να ορίσετε τιμές για ιδιότητες που υπολογίζονται όταν εκτελείται η σελίδα. Αυτό είναι χρήσιμο για την εμφάνιση περιεχομένου που ενημερώθηκε πρόσφατα σε ερωτήματα περιεχομένου. Οι χρήστες μπορούν να εισάγουν ημερομηνίες όπως "τις τελευταίες 3 ημέρες".
Μπορείτε να εισαγάγετε μια επέκταση JS Mustache σε αρκετές ιδιότητες. Οι τιμές που αναφέρονται σε αυτές τις συμβολοσειρές προέρχονται από ένα μοντέλο που εκτελείται όταν εκτελείται η σελίδα. Ένα έτοιμο προς χρήση μοντέλο χειρίζεται τις ημερομηνίες που έχουν μορφοποιηθεί για κλήσεις REST API περιεχομένου. Μπορείτε να επεκτείνετε αυτό το μοντέλο με πρόσθετες τιμές για να ικανοποιήσετε οποιεσδήποτε απαιτήσεις χρήστη.
Ακολουθεί ένα παράδειγμα της συμβολοσειράς που μπορείτε να καταχωρήσετε για μια ιδιότητα:
Content List component: Additional Query String property: updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"
Αυτή η καταχώριση Mustache για την ημερομηνία θα εκτιμηθεί κατά τον χρόνο εκτέλεσης ώστε η τιμής επιστροφής αλλάζει ανάλογα με το πότε εκτελείται (δηλαδή, επεκτείνεται σε updatedDate gt "2220181002060000000"
). Με αυτόν τον τρόπο, ο χρήστης μπορεί να δημιουργήσει οποιαδήποτε πολύπλοκη συμβολοσειρά ημερομηνίας αντί να πρέπει να καταχωρήσει μια προκαθορισμένη τιμή.
Υποστηριζόμενες ιδιότητες συστατικών στοιχείων
Οι ακόλουθες ιδιότητες υποστηρίζουν σύνταξη προτύπου JS Mustache:
Λίστα περιεχομένου
Πρόσθετη συμβολοσειρά ερωτήματος
Για παράδειγμα: updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"
Τίτλος/Παράγραφος/Κείμενο
Εμπλουτισμένο κείμενο που καταχωρείται μέσω του CKEditor
Για παράδειγμα: "Μορφή REST API περιεχομένου για ημερομηνία: {{#content.date}}now{{/content.date}}"
Σημείωση:
Χωρίς ένα προσαρμοσμένο μοντέλο για το πρότυπο Mustache, η επέκταση στο Τίτλος/Παράγραφος/Κείμενο δεν είναι τόσο χρήσιμη. Ωστόσο, είναι πολύ χρήσιμη για την επικύρωση αυτού που καταχωρείτε στην Πρόσθετη συμβολοσειρά ερωτήματος γιατί θα εκτιμηθεί καθώς εναλλάσσετε μεταξύ επεξεργασίας και προβολής και θα είναι άμεσα ορατή.Υποστηριζόμενη σύνταξη συστατικών στοιχείων
Το αντικείμενο content.date
υποστηρίζεται έτοιμο προς χρήση. Αυτό λαμβάνει δύο κύριες παραμέτρους, σήμερα
και τώρα
.
Η τιμή σήμερα
λαμβάνει την τρέχουσα ώρα του προγράμματος περιήγησης, τη μετατρέπει στα μεσάνυχτα απόψε και, στη συνέχεια, μετατρέπει αυτήν την τιμή σε ώρα UTC.
Η τιμή {{#content.date}}today{{/content.date}}
επεκτείνεται στην τιμή του προγράμματος περιήγησης για τα μεσάνυχτα απόψε, μετατρέπεται στην τιμή UTC και μορφοποιείται στη μορφή ημερομηνίας REST API περιεχομένου. Για παράδειγμα:
2220181008065959999
Στη συνέχεια, μπορεί να επαυξηθεί με:
today +/- [day | week | month | year]
Η τιμή σήμερα
συμπεριφέρεται επίσης διαφορετικά καθώς προσθέτετε ή αφαιρείτε από αυτή. Αν αφαιρέσετε από αυτή, θα χρησιμοποιήσει την ώρα το πρωί. Αν προσθέσετε σε αυτή, θα χρησιμοποιήσει την ώρα τα μεσάνυχτα. Για παράδειγμα:
Η τιμή {{#content.date}}today - 1 day{{/content.date}}
επεκτείνεται εχθές στην αρχή της ημέρας.
Η τιμή {{#content.date}}today + 2 days{{/content.date}}
επεκτείνεται μεθαύριο τα μεσάνυχτα.
Η τιμή τώρα
λαμβάνει την τρέχουσα ώρα του προγράμματος περιήγησης και τη μετατρέπει σε ώρα UTC χωρίς καμία προσαρμογή.
Η τιμή {{#content.date}}now{{/content.date}}
επεκτείνεται στην τρέχουσα ώρα του προγράμματος περιήγησης, μετατρέπεται στην τιμή UTC και μορφοποιείται στη μορφή ημερομηνίας REST API περιεχομένου.
Η τιμή τώρα
μπορεί επίσης να επαυξηθεί με την τιμή ώρα
. Οπότε έχετε:
now +/- [hour | day | week | month | year]
{{#content.date}}now + 2 hours{{/content.date}}
- δύο ώρες από τώρα μετατρέπονται σε ώρα UTC και μορφοποιούνται στη μορφή ημερομηνίας REST API περιεχομένου
{{#content.date}}now - 1 day{{/content.date}}
- εχθές από αυτήν την ώρα του προγράμματος περιήγησης μετατρέπεται σε ώρα UTC και μορφοποιούνται στη μορφή ημερομηνίας REST API περιεχομένου
Χρήση της υποστηριζόμενης σύνταξης συστατικών στοιχείων
Για να χρησιμοποιήσετε την επέκταση μακροεντολής στην πρόσθετη συμβολοσειρά ερωτήματος, ας υποθέσουμε ότι θέλετε να επιστραφούν όλα από τις τελευταίες 3 εβδομάδες, θα εισαγάγετε τα εξής:
updatedDate gt "{{#code.date}}today - 3 weeks{{/code.date}}"
Επιστρέφεται μόνο η ημερομηνία, οπότε για να εργαστείτε με την κλήση REST API περιεχομένου, προστίθενται μονά εισαγωγικά όταν κατασκευάζετε τη συμβολοσειρά ερωτήματος, όπως αν εισαγάγατε μια στατική τιμή.
MustacheJS
Για τη σύνταξη, αναφέρετε τις σελίδες προτύπου JS Mustache στο αρχείο mustache.github.io/mustache.5.html.
Μία αλλαγή έχει γίνει στο στιγμιότυπο Mustache που εκτελείται κατά την επέκταση των συμβολοσειρών. Το Mustache παρέχει μια επέκταση κειμένου
που χρησιμοποιεί {{ }}
και μια επέκταση html
που χρησιμοποιεί {{{ }}}
. Η διαφορά μεταξύ αυτών των δύο είναι ότι η επέκταση κειμένου κάνει μια κωδικοποίηση HTML στη συμβολοσειρά, δηλαδή, αν η τιμή επεκταθεί σε a < b
, το αποτέλεσμα θα είναι a < b
. Αυτό δεν είναι αυτό που θα θέλατε για την κατασκευή συμβολοσειρών για διευθύνσεις τοποθεσίας. Θα μπορούσατε να πείτε στον χρήστη να χρησιμοποιήσει την επέκταση HTML, αλλά αυτό είναι απλά επιβάρυνση και θα προκαλέσει περισσότερα προβλήματα, όπως το να εξηγήσετε γιατί πρέπει να χρησιμοποιήσουν {{{ }}}
.
Για να το αποφύγετε αυτό, το Mustache έχει ρυθμιστεί ώστε να μην κάνει διαφυγή τιμών κατά τη χρήση {{ }}
. Αυτό σημαίνει ότι οι {{ }}
και οι {{{ }}}
συμπεριφέρονται το ίδιο. Αυτό επίσης αφήνει την κωδικοποίηση οποιουδήποτε αποτελέσματος ως άσκηση για τον χρήστη, αν απαιτείται.
Το μοντέλο OOTB Mustache
Το Mustache απαιτεί να εφαρμοστεί ένα μοντέλο στο πρότυπο για επέκταση. Στο προηγούμενο παράδειγμα, το {{#content.date}}
έχει οριστεί ήδη έτοιμο προς χρήση, ενώ μια νέα ιδιότητα, όπως η {{person}}
, μπορεί να προστεθεί από τον προγραμματιστή. Αν ο χρήστης εισαγάγει μια τιμή στο πρότυπο Mustache που δεν υπάρχει στο μοντέλο, το αποτέλεσμα θα είναι μια κενή συμβολοσειρά. Έτσι, στην περίπτωση της συμβολοσειράς Hello {{person}}
, θα επεκταθεί απλά σε Hello
εκτός και ο προγραμματιστής προσθέσει το στοιχείο person
στο μοντέλο.
Το αντικείμενο μοντέλου που χρησιμοποιείται είναι ένα καθολικό αντικείμενο που ονομάζεται SCSMacros
. Ο προγραμματιστής είναι ελεύθερος να προσθέσει οποιεσδήποτε πρόσθετες καταχωρίσεις σε αυτό το αντικείμενο. Το αντικείμενο θα μεταβιβαστεί στο Mustache όταν γίνει η εκτίμηση του μοντέλου.
Το έτοιμο προς χρήση αντικείμενο μοντέλου υποστηρίζει προς το παρόν μόνο το αντικείμενο content.date
:
{ content: { date: <lambda implementation> } }
Προσαρμοσμένο μοντέλο Mustache
Τα υποστηριζόμενα αντικείμενα μπορούν να βελτιωθούν από τον προγραμματιστή με βάση τις απαιτήσεις του. Έτσι, μπορεί να εισαγάγει ένα αντικείμενο lastTwoDays
και να απλοποιήσει την επέκταση απλά σε {{lastTwoDays}}
.
Για να επεκτείνετε το μοντέλο ώστε να υποστηρίζει κάτι όπως Hello {{person}}
στο προηγούμενο παράδειγμα, θα πρέπει να προσθέσετε το αντικείμενο person
στο SCSMacros. Θα πρέπει να το κάνετε αυτό πριν εκτελεστεί η σελίδα. Μπορεί να γίνει εντός της διάταξης σελίδας προσθέτοντας μια ετικέτα δέσμης ενεργειών στην αρχή της. Για παράδειγμα:
<script type="text/javascript"> window.SCSMacros = window.SCSMacros || {}; // define/get the SCSMacros object window.SCSMacros.person = "World"; </script>
Αφού γίνει αυτή η αλλαγή, το πρότυπο Hello {{person}}
θα επεκταθεί σε: Hello World
.
Αν θέλετε να μεταβιβάσετε τιμές στο αντικείμενο (για παράδειγμα, Hello {{#person}}personId{{/person}}
), θα πρέπει να υλοποιήσετε ένα mustache lambda
και να περιβάλετε και να επεκτείνετε την τιμή εντός της υλοποίησης.
Για παράδειγμα:
<script type="text/javascript"> window.SCSMacros = window.SCSMacros || {}; // define/get the SCSMacros object //implement "person" as a lambda window.SCSMacros.person = function () { var people = { '111': { firstName: 'Small', lastName: 'World'}, '222': { firstName: 'Big', lastName: 'Universe'} }; return function (text, render) { var expandedText = render(text); var chosenPerson = people[expandedText] || people['111']; return chosenPerson.firstName; } }; </script>
Αφού γίνει αυτή η αλλαγή, το πρότυπο Hello {{#person}}111{{/person}}
θα επεκταθεί σε Hello Small
και το πρότυπο Hello {{#person}}222{{/person}}
θα επεκταθεί σε Hello Big
.
Σημείωση:
Η επέκταση Mustache εκτελείται συγχρόνως. Αν πρέπει να ανακτήσετε ασύγχρονες τιμές, αυτές θα πρέπει να επιλυθούν εντός του μοντέλου πριν επιχειρήσετε να εκτελέσετε την επέκταση mustache και αυτό δεν υποστηρίζεται προς το παρόν, παρόλο που είναι δυνατές αξιόλογες υλοποιήσεις.