Extensions > Templates

Κατασκευή Template

(1/2) > >>

farmville450:
Καλημέρα κύριοι
Προσπαθώ να κατασκευάσω ένα template και απ' ότι διάβασα στην τεκμηρίωση του Elxis (https://www.elxis.net/docs/el/developers/libraries/elxisdocument.html) ο τρόπος για να καλέσεις τα modules είναι:
1. Καλώνστας τα με τη θέση τους: $eDoc->modules('left');
2. Καλώνστας τα με το όνομά τους: $eDoc->module('mod_language');
Η ερώτηση μου είναι αν γίνεται με κάποιο τρόπο να προστίθεται δυναμικά ένα "style" στην κλάση τους, ανάλογα με τον αριθμό των modules που βρίσκονται στη θέση αυτή.
Για παράδειγμα εάν τα modules που βρίσκονται στη θέση ('user1') είναι 2 τότε να γίνεται το εξής:
Module 1 <div class="module span6"> και Module 2 <div class="module span6">
και αν είναι 3 τότε να γίνεται το εξής:
Module 1 <div class="module span4"> , Module 2 <div class="module span4"> και Module 3 <div class="module span4">
Ευχαριστώ

michalis1984:
Η συνάρτηση $eDoc->countModules('left') μπορεί να βοηθήσει το template σου να "βλέπει" σε κάθε περίπτωση πόσα modules υπάρχουν στην θέση left.

countModules
public function countModules($position)
Returns the number of modules assigned to the given modules position (eg. left). This method is a replacement of mosCountModules function from the Elxis 2009.x series.
https://www.elxis.net/docs/el/developers/libraries/elxisdocument.html

farmville450:
Αυτό το χρησιμοποίησα και μου επιστρέφει έναν αριθμό.
Το προκαθορισμένο $style του Elxis τοποθετεί μια DIV με class module σε όλα τα modules που βρίσκονται στη θέση 'left' για παράδειγμα. Η ερώτησή μου είναι αν μπορώ με κάποιο τρόπο να επέμβω σε εκείνο το κομμάτι και να προστίθεται δυναμικά μια κλάση ανάλογα με τον αριθμό των modules που βρίσκονται στη θέση αυτή.

datahell:
Δεν μπορείς να κάνεις ακριβώς αυτό που θες με τον τρόπο που θες. Μπορείς να ορίσεις το στυλ του περιέκτη, όχι όμως και την εφαρμοζόμενη css κλάση.

Ενημερωτικά: Μπορείς να ορίσεις το στυλ σε "none". Σε αυτή την περίπτωση δεν θα σου δημιουργηθεί ο περιέκτης <div class="module"></div> οπότε θα μπορείς να βάλεις τον δικό σου με ότι περιεχόμενο/κλάση θες. Το μειονέκτημα είναι ότι αυτός ο περιέκτης θα εφαρμοστεί γύρω από όλα τα Module και όχι γύρω από το καθένα.

echo '<div class="module anything">';
$eDoc->modules('top', 'none');
echo '</div>';

Αν όμως φορτώσεις ένα ένα τα module μπορείς να κάνεις αυτό που θες:
echo '<div class="module anything">';
$eDoc->module('mod_first', 'none');
echo '</div>';
echo '<div class="module anything">';
$eDoc->module('mod_second', 'none');
echo '</div>';

Υπενθυμίζω ότι μπορούμε να φορτώνουμε τα module τόσο με το όνομά τους, πχ $eDoc->module('mod_something'), όσο και με το id τους, πχ $eDoc->module(24).

Ένας εντελώς διαφορετικός τρόπος είναι με css (πχ αυτό - αν και παλιό) ή με javascript (με javascript είναι πολύ εύκολο).

Ιδέα
Η πλησιέστερη λύση με γνώμονα τον τρόπο που θες είναι ο εξής. Βάλε ένα και μόνο module σε κάθε θέση (user1, user2, user3, ...) και εφάρμοσε την παρακάτω μέθοδο.

$num = $eDoc->countModules('user1') + $eDoc->countModules('user2') + $eDoc->countModules('user3');
$css_class = 'module';
if ($num > 0) {
       if ($num == 2) {
            $css_class = 'module span6';
       } else if ($num == 3) {
            $css_class = 'module span8';
      }
}

if ($eDoc->countModules('user1') > 0) {
       echo '<div class="'.$css_class.'">';
       $eDoc->modules('user1', 'none');
       echo '</div>';
}
if ($eDoc->countModules('user2') > 0) {
       echo '<div class="'.$css_class.'">';
       $eDoc->modules('user2', 'none');
       echo '</div>';
}
if ($eDoc->countModules('user3') > 0) {
       echo '<div class="'.$css_class.'">';
       $eDoc->modules('user3', 'none');
       echo '</div>';
}

Τέλος, ο έσχατος τρόπος είναι να κάνεις ένα query στη βάση δεδομένων και να δεις πια ακριβώς module βρίσκονται στη θέση/θέσεις που θες. Κατόπιν τα φορτώνεις ένα ένα με τον τρόπο που έδειξα πριν.

farmville450:
Ευχαριστώ πολύ datahell. Ήσουν κατατοπιστικότατος :)

Navigation

[0] Message Index

[#] Next page

Go to full version