Elxis CMS Forum

Ελληνικό Forum => Διαχείριση => Topic started by: evkarab on November 01, 2013, 11:20:25

Title: Εμφάνιση module μέσα σε άρθρο
Post by: evkarab on November 01, 2013, 11:20:25
Ένα  module πχ "Advertisements" μπορεί να εμφανιστεί στις κατηγορίες.
Πως μπορεί να εμφανιστεί και σε αυτόνομες σελίδες ή άρθρα;
Title: Re: Εμφάνιση module μέσα σε άρθρο
Post by: datahell on November 04, 2013, 09:30:37
Δεν έχει προβλεφθεί θέση module στη σελίδα του άρθρου.
Μπορείς να κάνεις κάποιο από τα εξής:

1. Δημιούργησε μία θέση module εντός των άρθων.
Άνοιξε το αρχείο components/com_content/views/article.html.php και πήγαινε στη συνάρτηση "showArticle" στην κορυφή. Στο σημείο που θες * βάλε τον παρακάτω κώδικα:

Code: [Select]
eFactory::getDocument()->modules('myposition');
* Αν πχ θες τα module να εμφανίζονται ακριβώς κάτω από το κυρίως κείμενο θα το βάλεις εδώ:
Code: [Select]
echo $row->text."\n";
echo '<div class="clear"></div>'."\n";
ΚΩΔΙΚΑΣ ΕΔΩ
** Ονόμασε τη θέση σου, "myposition" σε αυτό το παράδειγμα, σε ότι θες. Φτιάξε αυτή τη θέση στη διαχείριση και κατόπιν θα μπορείς να εμφανίζεις module σε αυτή τη θέση.

2. Χρήση θέσων template
Μπορείς να εμφανίσεις κάποιο module μόνο στη σελίδα άρθρου σε μία από τις υπάρχουσες θέσεις ή σε μία νέα θέση στο template μετο εξής τρυκ: Όταν φορτώνεται μία σελίδα άρθρου το Elxis ορίζει την σταθερά ELXIS_ARTID που έχει ως τιμή το ID του άρθρου. Οπότε λοιπόν στο index.php του template μπορούμε να φορτώσουμε μία θέση Module ΜΟΝΟ όταν ο χρήστης βλέπει ένα άρθρο.

Παράδειγμα 1
Code: [Select]
if (defined('ELXIS_ARTID')) {
    eFactory::getDocument()->modules('myposition');
}

Παράδειγμα 2
Εμφάνισε το οριζόντιο μενού στο template Delta σε όλες τις σελίδες εκτός από αυτές των άρθρων:
<div class="delta_menu">
   <?php if (!defined('ELXIS_ARTID')) { $eDoc->modules('menu', 'none'); } ?>
</div>

Μπορούμε να κάνουμε πολύ πιο ειδικές επιλογές με το ίδιο το id του άρθρου. Πχ θέλουμε σε ένα συγκεκριμένο άρθρο με id = 24 να φορτώσουμε μία ειδική θέση module:
Code: [Select]
if (defined('ELXIS_ARTID') && (ELXIS_ARTID == 24)) {
      eFactory::getDocument()->modules('special_position');
}

Τέλος, αντίστοιχα του ELXIS_ARTID, υπάρχει και το ELXIS_CATID για τις σελίδες κατηγοριών.

Το Elxis σου παρέχει απίστευτη ευελιξία και χωρίς κόπο αν έχεις όρεξη να πειραματιστείς. Μπορείς πχ να φορτώνεις διαφορετικό template για κάποιες κατηγορίες, να αλλάζεις τις στήλες κατά το δοκούν, να εμφανίζεις ή να αποκρύπτεις το μενού ή το footer, ή δεν ξέρω και εγώ τι. Δεν υπάρχει όριο, είναι θέμα φαντασίας...

Χρήσιμες συνδέσεις
Όλες οι PHP σταθερές του Elxis (https://www.elxis.net/docs/developers/core/php-constants.html)
Οδηγίες κατασκευής template (https://www.elxis.net/docs/developers/tutorials/templates-guide.html)
Βιβλιοθήκη Elxis Document (https://www.elxis.net/docs/developers/libraries/elxisdocument.html)
Title: Re: Εμφάνιση module μέσα σε άρθρο
Post by: michalis1984 on March 09, 2014, 03:11:14
Υπάρχει κάτι αντίστοιχο με το defined('ELXIS_ARTID') αλλά για την αρχική σελίδα;

Μέσω template, κάτι να εμφανίζεται μόνο στην αρχική σελίδα.
Title: Re: Εμφάνιση module μέσα σε άρθρο
Post by: datahell on March 09, 2014, 10:59:56
Δεν σου χρειάζεται κάτι τέτοιο στην αρχική σελίδα. Εκεί έχεις το grid της αρχικής σελίδας με ένα σωρό θέσεις module. Όταν βάλεις ένα module σε μία θέση του grid της αρχικής σελίδας θα εμφανίζεται μόνο στην αρχική σελίδα.
Title: Re: Εμφάνιση module μέσα σε άρθρο
Post by: michalis1984 on March 09, 2014, 15:49:33
Σωστά! Όμως αν κάποιος θέλει να μην εμφανίζεται κάτι στην αρχική σελίδα (πχ. το pathway ή κάποια πλαϊνή στήλη - έτσι ώστε να έχει όλο το πλάτος για να φτιάξει με την άνεση του την frontpage με το grid), αυτό πρέπει να υποστηρίζεται απ' το theme. Τελικά επειδή βασίστηκα στο delta theme βρήκα πως κάτι τέτοιο υπάρχει στις ρυθμίσεις του θέματος και βολεύτηκα.
Title: Re: Εμφάνιση module μέσα σε άρθρο
Post by: michalis1984 on August 25, 2015, 17:13:50
Μπορούν τα content plugins να βλέπουν την τιμή ELXIS_ARTID ή είναι διαθέσιμη μόνο στα templates; και αν ναι πως;

// Απαντάω μόνος μου. Την βλέπουν.  ;D
Title: Re: Εμφάνιση module μέσα σε άρθρο
Post by: datahell on August 25, 2015, 17:57:39
Οποιαδήποτε επέκταση (module, plugins, template, κλπ) μπορεί να δει την σταθερά ELXIS_ARTID. Το ELXIS_ARTID είναι μία σταθερά (constant) της php που δημιουργείται στο component content  και συνεπώς την βλέπεις όπως όποια οποιαδήποτε άλλη τέτοια. Μόνο κάνε έναν έλεγχο πρώτα αν έχει οριστεί:

if (defined('ELXIS_ARTID')) {
    //έχει οριστεί, μπορείς να την χρησιμοποιήσεις, πχ:
    echo 'You see article with ID: '.ELXIS_ARTID;
}
Title: Re: Εμφάνιση module μέσα σε άρθρο
Post by: michalis1984 on August 25, 2015, 21:56:29
Ωραία. Αν θέλει κάποιο plugin να παίρνει κάποια στοιχεία ενός άρθρου πχ. τα hits ή το subtitle ή ακόμη και τα tags ; Πως τα παίρνει; Μέσω του elxis document?
Title: Re: Εμφάνιση module μέσα σε άρθρο
Post by: datahell on August 26, 2015, 14:08:14
Στα plugin όλα τα στοιχεία του άρθρου είναι ήδη γνωστά γιατί αφενός τα plugin εκτελούνται μέσα στο component content, αφετέρου η μεταβλητή $row που έχει όλα τα στοιχεία του άρθρου περνάει στη συνάρτηση process του plugin.

public function process(&$row, $published, $params) {
   ...
}

Οπότε μπορείς να δεις πχ τα hits έτσι: $row->hits

Σε όλες τις άλλες επεκτάσεις (πχ Module) εφόσον έχεις το ELXIS_ARTID μπορείς να κάνεις query την βάση δεδομένων και να πάρεις ότι πληροφορία θες για το άρθρο.

if (defined('ELXIS_ARTID')) {
   $db = eFactory::getDB();
   $sql = "SELECT  ".$db->quoteId('hits').",  ".$db->quoteId('subtitle').",  ".$db->quoteId('metakeys')." FROM ".$db->quoteId('#__content')." WHERE  ".$db->quoteId('id')." = ".ELXIS_ARTID;
   $stmt = $db->prepareLimit($sql, 0, 1);
   $stmt->execute();
   $data = $stmt->fetch(PDO::FETCH_OBJ);
   if ($data) {
      echo 'Hits: '.$data->hits.'<br />';
      echo 'Subtitle: '.$data->subtitle.'<br />';
      echo 'META Keywords: '.$data->metakeys.'<br />';
   }
}
Title: Re: Εμφάνιση module μέσα σε άρθρο
Post by: michalis1984 on August 27, 2015, 14:48:13
Ωραίος ευχαριστώ. Ακόμη μια απάντηση που γίνεται bookmark.