Welcome,
Guest
.
Please
login
or
register
.
Did you miss your
activation email
?
News:
Bug reports and fixes
.
Home
Help
Login
Register
Elxis CMS Forum
»
Extensions
»
Templates
(Moderators:
Coursar
,
ks-net
) »
Κατασκευή Template
« previous
next »
Print
Pages: [
1
]
Author
Topic: Κατασκευή Template (Read 9297 times)
farmville450
Newbie
Posts: 23
Κατασκευή Template
«
on:
May 08, 2016, 11:44:54 »
Καλημέρα κύριοι
Προσπαθώ να κατασκευάσω ένα 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
">
Ευχαριστώ
Logged
michalis1984
Sr. Member
Posts: 334
Re: Κατασκευή Template
«
Reply #1 on:
May 08, 2016, 12:11:21 »
Η συνάρτηση $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
«
Last Edit: May 08, 2016, 12:14:47 by michalis1984
»
Logged
farmville450
Newbie
Posts: 23
Re: Κατασκευή Template
«
Reply #2 on:
May 08, 2016, 12:23:50 »
Αυτό το χρησιμοποίησα και μου επιστρέφει έναν αριθμό.
Το προκαθορισμένο $style του Elxis τοποθετεί μια DIV με class module σε όλα τα modules που βρίσκονται στη θέση 'left' για παράδειγμα. Η ερώτησή μου είναι αν μπορώ με κάποιο τρόπο να επέμβω σε εκείνο το κομμάτι και να προστίθεται
δυναμικά
μια κλάση ανάλογα με τον αριθμό των modules που βρίσκονται στη θέση αυτή.
Logged
datahell
Elxis Team
Hero Member
Posts: 10356
Re: Κατασκευή Template
«
Reply #3 on:
May 08, 2016, 22:27:01 »
Δεν μπορείς να κάνεις ακριβώς αυτό που θες με τον τρόπο που θες. Μπορείς να ορίσεις το στυλ του περιέκτη, όχι όμως και την εφαρμοζόμενη 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 βρίσκονται στη θέση/θέσεις που θες. Κατόπιν τα φορτώνεις ένα ένα με τον τρόπο που έδειξα πριν.
«
Last Edit: May 09, 2016, 20:34:34 by datahell
»
Logged
Elxis Team
|
Is Open Source
|
IOS Rentals | IOS AERO
farmville450
Newbie
Posts: 23
Re: Κατασκευή Template
«
Reply #4 on:
May 08, 2016, 23:15:53 »
Ευχαριστώ πολύ datahell. Ήσουν κατατοπιστικότατος
Logged
webgift
Elxis Team
Hero Member
Posts: 4193
Re: Κατασκευή Template
«
Reply #5 on:
May 09, 2016, 11:07:35 »
Μια διόρθωση φαντάζομαι από:
if ($num > 0) {
if ($num == 2) {
$css_class= 'module span6';
} else if ($num == 2) {
$css_class= 'module span8';
}
}
σε
if ($num > 0) {
if ($num == 1) {
$css_class= 'module span6';
} else if ($num == 2) {
$css_class= 'module span8';
}
}
Logged
Elxis Team •
Custom web design [EN]
-
[EL]
•
.GR Registrar
farmville450
Newbie
Posts: 23
Re: Κατασκευή Template
«
Reply #6 on:
May 09, 2016, 12:45:09 »
Ευχαριστώ πολύ για τις απαντήσεις παιδιά. Σκοπός μου είναι αν κάποια στιγμή τα καταφέρω (μιας και ασχολούμαι με php μόλις ένα μήνα) και τελειώσω την template να τη διαθέσω στην κοινότητα, εξ ου και το ότι δεν ήθελα να περιορίσω τον χρήστη να μπορεί να τοποθετεί ένα module στις θέσεις αυτές. Αν και πιστεύω ότι ελάχιστοι πρόκειται να χρησιμοποιήσουν πάνω από ένα. Όσον αφορά τη μέθοδο ορίζοντας το στυλ σε 'none', δουλεύει μια χαρά. Ωστόσο η ιδέα του datahell είναι σχεδόν αυτό που ήθελα. Ίσως αν κάποια στιγμή τα CSS αρχεία ξεκινήσουν να δέχονται μεταβλητές το πράγμα να γίνει ακόμα πιο εύκολο.
Και πάλι ευχαριστώ.
Logged
Print
Pages: [
1
]
« previous
next »
Elxis CMS Forum
»
Extensions
»
Templates
(Moderators:
Coursar
,
ks-net
) »
Κατασκευή Template