Wybór templatki i utrzymanie jej w każdej pozycji menu
Strona 1 z 2 12 OstatniOstatni
Wyniki 1 do 10 z 12

Temat: Wybór templatki i utrzymanie jej w każdej pozycji menu

  1. #1
    Nowicjusz
    Dołączył
    25-11-2010
    Wpisy
    20
    Punkty
    10

    Wybór templatki i utrzymanie jej w każdej pozycji menu

    Witam wszystkich. Do tej pory nie miałem większych problemów, a jeśli wystąpiły rozwiązywałem je bardzo szybko. Ostatnio zachciało mi się wprowadzić użytkownikom możliwość zmiany skórki strony jednak nie działa to jak należy. Opiszę po kolei z czego korzystałem i jakie były tego efekty. Poniżej zrzut z projektanta menu:



    i korzystam z modułu Maxi Menu CK (nie wiem czy to ma jakiekolwiek znaczenie...).

    Opcja wyboru templatki znajduje się w bocznym panelu strony i jest widoczna w każdej pozycji menu. Strona "startuje" zawsze z newsów.

    Template selector
    Działa rewelacyjnie, "trzyma" wybraną skórkę we wszystkich pozycjach menu, ale po wyłączeniu przeglądarki, ponownym włączeniu i wejściu na stronę "wskakuje" domyślna skórka. Jeżeli strona była otwarta w zakładce, która została zamknięta, ale przeglądarka nie została zamknięta i ponownie wejdziemy na stronę wybrana skórka jest pamiętana.


    Template chooser
    Tu jest coś co mnie interesuje - ciasteczka. Dzięki czemu po wyłączeniu przeglądarki, włączeniu i ponownym wejściu na stronę ładuje się wybrana uprzednio skórka. Mod trzyma wybraną templatkę na każdej pozycji menu, dopóki ktoś nie wpadnie na pomysł jej zmiany w pozycjach [2-5] lub [11-15]. Wtedy [1,6,7,8,9,10,16], [2-5] i [11-15] są taktowane jako 3 "grupy", w których mogę mieć grupowo inną skórkę.

    Czyli będąc w jednej z pozycji z grupy [1,6,7,8,9,10,16] wybrałem sobie skórkę A, wtedy cała grupa ją pamięta, będąc w [2-5] wybrałem B - cała grupa ją zapamiętuje i w kocu [11-15] wybrałem C - także cała grupa ją zapamiętuje. Łącznie mogę mieć 3 różne skórki. Jeśli jestem w pozycji menu jednej grupy i przechodzę do pozycji należącej do innej grupy zmienia się skórka.

    Dziwne prawda? I strasznie mnie to denerwuje...

    Jeżeli wyłączę obsługę ciasteczek Template chooser zachowuje się jak Template selector, czyli "trzyma" wszędzie skórkę niezależnie, gdzie ją zmienię ale nie pamięta jej jeśli zamknę przeglądarkę.

    Mam nadzieję, że zrozumieliście mój opis ;). Jeśli macie jakiś pomysł na rozwiązanie w postaci innego dodatku czy cokolwiek prosiłbym o pomoc, bo ja już wysiadam. 3 dni męczę już ten temat i nie mogę przez niego zmrużyć oka... Nie chciałbym ponownie wracać do jednej templatki.

    Pozdrawiam i Wesołych Świąt!

    P.S. Jeżeli menu nie miałoby submenu wszystko byłoby OK, ale to rozwiązanie którego chcę uniknąć.
    Ostanio edytowane przez CrowPL : 24-12-2010 13:33

  2. Pani Reklamowa
    Pani Reklamowa jest aktywna
    Avatar Panny Google

    Dołączył
    19-08-2010
    Skąd
    Internet
    Postów
    milion
    Pochwał
    setki
  3. #2
    Opiekun forum
    Dołączył
    19-09-2005
    Wpisy
    3 743
    Punkty
    131

    Domyślny

    Opisane dosyć szczegółowo ale czy możesz dać link do stronki? Nie ma to jak własnoręcznie sprawdzić

  4. #3
    Nowicjusz
    Dołączył
    25-11-2010
    Wpisy
    20
    Punkty
    10

    Domyślny

    Proszę bardzo: www.mylenium.pl

  5. #4
    Opiekun forum
    Dołączył
    19-09-2005
    Wpisy
    3 743
    Punkty
    131

    Domyślny

    Faktycznie dla pozycji w submenu są tworzone nowe ciasteczka. I sądzę że jeżeli nie ma opcji za to odpowiadającej w ustawieniach modułu to tylko edycja kodu modułu może tu pomóc. Tak na oko nie powinna to być zbyt skomplikowana sprawa.

  6. #5
    Nowicjusz
    Dołączył
    25-11-2010
    Wpisy
    20
    Punkty
    10

    Domyślny

    template chooser składa się z mod i plg. Niestety ja ni w ząb php... więc nie pozostaje mi nic innego jak prosić o pomoc.

    Część odpowiedzialna za zmianę templatki w module, którą znalazłem:

    Kod PHP:
    if (isset( $_POST["mod_change_template_".$chooserID])) {
      
    modTemplateChooserHelper::setTemplate($_POST["mod_change_template_".$chooserID], $keep_cookie);
    } else {
      if ((
    $keep_cookie == 1)&&(isset($_COOKIE["joomla_template"]))&&
          (
    $cur_template != $_COOKIE["joomla_template"])) {
        
    $cookietemplate $_COOKIE["joomla_template"];
        
    modTemplateChooserHelper::setTemplate($cookietemplate$keep_cookie);
      }

    Ostanio edytowane przez CrowPL : 25-12-2010 13:46

  7. #6
    Bywalec
    Dołączył
    29-04-2008
    Skąd
    www.itcent.pl
    Wpisy
    353
    Punkty
    38

    Domyślny

    wrzuć całą zawartość plugina
    www.ITCent.pl - Obsługa informatyczna Puławy

  8. #7
    Opiekun forum
    Dołączył
    19-09-2005
    Wpisy
    3 743
    Punkty
    131

    Domyślny

    Tu raczej jest wszystko ok, zmian wymaga funkcja setTemplate
    Tak jak napisał tlewap, wrzuc cały moduł albo przynajmniej helper, będzie łatwiej się rozeznać.

  9. #8
    Nowicjusz
    Dołączył
    25-11-2010
    Wpisy
    20
    Punkty
    10

    Domyślny

    mod_templatechooser:

    - mod_templatechooser.php
    Kod PHP:
    <?php
    /**
     * Template Chooser Module Entry Point
     * 
     * @package    Joomla
     * @subpackage Modules
     * @link http://templates.linkster.be/
     * @license        GNU/GPL, see LICENSE.php
     * mod_templatechooser is free software. This version may have been modified pursuant
     * to the GNU General Public License, and as distributed it includes or
     * is derivative of works licensed under the GNU General Public License or
     * other free or open source software licenses.
     */


    // no direct access
    defined'_JEXEC' ) or die( 'Restricted access' );

    global 
    $mainframe;
    $cur_template $mainframe->getTemplate();

    // Include the syndicate functions only once
    require_once( dirname(__FILE__).DS.'helper.php' );
       

    $chooserID $module->id$module->id '0';

    $titlelength $params->get'title_length'20 );
    $preview_height $params->get'preview_height'90 );
    $preview_width $params->get'preview_width'140 );
    $show_preview $params->get'show_preview');
    $keep_cookie $params->get'keep_cookie');
    $moduleclass_sfx $params->get('moduleclass_sfx')?$params->get('moduleclass_sfx'):'' ;


    if (isset( 
    $_POST["mod_change_template_".$chooserID])) {
      
    modTemplateChooserHelper::setTemplate($_POST["mod_change_template_".$chooserID], $keep_cookie);
    } else {
      if ((
    $keep_cookie == 1)&&(isset($_COOKIE["joomla_template"]))&&
          (
    $cur_template != $_COOKIE["joomla_template"])) {
        
    $cookietemplate $_COOKIE["joomla_template"];
        
    modTemplateChooserHelper::setTemplate($cookietemplate$keep_cookie);
      }
    }

    $darray modTemplateChooserHelper::getTemplates($params);


    require( 
    JModuleHelper::getLayoutPath'mod_templatechooser' ) );
    ?>

    - helper.php
    Kod PHP:
    <?php
    /**
     * Helper class for Template Chooser module
     * 
     * @package    mod_templatechooser
     * @subpackage Modules
     * @link http://templates.linkster.be/
     * @license        GNU/GPL, see LICENSE.php
     * mod_templatechooseris free software. This version may have been modified pursuant
     * to the GNU General Public License, and as distributed it includes or
     * is derivative of works licensed under the GNU General Public License or
     * other free or open source software licenses.
     */


    class modTemplateChooserHelper
    {

      function 
    setTemplate($newTemplate$keepcookie)
      {
        global 
    $mainframe;


        
    // Initialize some variables
        
    $_SESSION['template'] = $newTemplate;    
        
    // store in cookie if needed
        
    if ($keepcookie == 1) {        
          
    setcookie("joomla_template"$newTemplatetime()+ (86400 365));
        }
        
    $uri =& JURI::getInstance();
        
    $url $uri->current();
        
    $url .= '?';
        
    $paramarray  $uri->getQuery(true);
        foreach (
    $paramarray as $paramname => $paramvalue) {
          if (
    $paramname != 'template') {
            
    $url .= $paramname;
        
    $url .= '=';
        
    $url .= $paramvalue;
        
    $url .= '&&';
          }    
        }
        
    $url .= 'template=';
        
    $url .= $newTemplate;
        
    $mainframe->redirect($url);
      }

      function 
    getTemplates(&$params) {

        
    // titlelength can be set in module params
        
    $titlelength $params->get'title_length'20 );
        
    $preview_height $params->get'preview_height'90 );
        
    $preview_width $params->get'preview_width'140 );
        
    $keep_cookie $params->get'keep_cookie');

        
    $show_preview $params->get'show_preview');

        
    // Read files from template directory
        
    $template_path "templates";
        
    $templatefolder = @dir$template_path );
        
    $darray = array();

        if (
    $templatefolder) {
        while (
    $templatefile $templatefolder->read()) {
            if (
    $templatefile != "." && $templatefile != ".."&& $templatefile != "_system"&& $templatefile != "system" && $templatefile != ".svn" && $templatefile != "css" && is_dir"$template_path/$templatefile)  ) {
              if (
    $params->get($templatefile1) == ) {
                    
    $templatefile_new $params->get($templatefile."_name") ? $params->get($templatefile."_name") : $templatefile;
                    if(
    strlen($templatefile_new) > $titlelength) {
                    
    $templatename substr$templatefile_new0$titlelength-);
                    
    $templatename .= "...";
                } else {
                    
    $templatename $templatefile_new;
                }
                    
    $darray[] = JHTML::_('select.option'$templatefile$templatename );
              }
            }
        }
        
    $templatefolder->close();
        }
     
        
    sort$darray );
        return 
    $darray;
      }
    }

    plg_templatechooser

    -templatechooser.php
    Kod PHP:
    <?php
    defined
    '_JEXEC' ) or die( 'Restricted access' );
    jimport('joomla.event.plugin');

    class 
    plgSystemTemplateChooser extends JPlugin
    {
      function 
    plgSystemTemplateChooser(&$subject$config)
      {
        
    parent::__construct($subject,$config);
      }

      function 
    onAfterInitialise()
      {
        global 
    $mainframe;
        if (
    $mainframe->isAdmin()) {
           return;
        }
        if (isset(
    $_SESSION['template'])&&($_SESSION['template']!='')) {
          
    $mainframe->setTemplate($_SESSION['template']);
          return 
    true;
        }
      }
    }

    ?>
    Gdyby czegoś Wam brakowało to pliki leżą na serwerze: http://www.mylenium.pl/template_chooser.zip

    Autor modułu twierdzi, że aby działał prawidłowo plg też musi być zainstalowany. Ja go wyłączyłem dziś dla testów i nie widzę różnicy.

    Innych modułów umożliwiających ręczną zmianę templatki w "locie" przez odwiedzającego stronę w bazie extensions.joomla.org oprócz dwóch wymienionych w 1 poście nie znalazłem... Dziwią mnie też super oceny tych modułów. Najwidoczniej ci co z nich korzystają nie mają submenu i nie wymagają zapamiętywania wybranej skórki po wyłączeniu przeglądarki ;). Wtedy faktycznie sprawdzą się idealnie.
    Ostanio edytowane przez CrowPL : 26-12-2010 10:58

  10. #9
    Opiekun forum
    Dołączył
    19-09-2005
    Wpisy
    3 743
    Punkty
    131

    Domyślny

    Spróbuj tak, poniżej funkcja do podmiany w pliku helper.php (dopisałem 4 znaki, ale dla pewności podaję całą funkcję ;) )

    Kod PHP:
      function setTemplate($newTemplate$keepcookie)
      {
        global 
    $mainframe;


        
    // Initialize some variables
        
    $_SESSION['template'] = $newTemplate;    
        
    // store in cookie if needed
        
    if ($keepcookie == 1) { 
           
    setcookie("joomla_template"$newTemplatetime()+ (86400 365), "/");
        }
        
    $uri =& JURI::getInstance();
        
    $url $uri->current();
        
    $url .= '?';
        
    $paramarray  $uri->getQuery(true);
        foreach (
    $paramarray as $paramname => $paramvalue) {
          if (
    $paramname != 'template') {
            
    $url .= $paramname;
        
    $url .= '=';
        
    $url .= $paramvalue;
        
    $url .= '&&';
          }    
        }
        
    $url .= 'template=';
        
    $url .= $newTemplate;
        
    $mainframe->redirect($url);
      } 

  11. #10
    Nowicjusz
    Dołączył
    25-11-2010
    Wpisy
    20
    Punkty
    10

    Domyślny

    Rewelacja. Wygląda na to, że gdziekolwiek wybrany jest skin, jest utrzymywany w każdej pozycji menu/submenu. Nawet po wznowieniu sesji z submenu wszystko działa. Zmiana jest już na stronie.

    Na razie nie dziękuję jeszcze, żeby nie zapeszyć ;).

    Powyższa zmiana dotyczy wielu poziomów menu?
    Ostanio edytowane przez CrowPL : 26-12-2010 19:51

Strona 1 z 2 12 OstatniOstatni

Podobne tematy

  1. Top Menu i inna ikona przy każdej pozycji
    przez sebian na forum Różne
    Odpowiedzi: 2
    Ostatni post/autor: 10-04-2010, 20:54
  2. Przerobienie templatki z elementami Flash i integrowanie jej pod Joomla 1.5
    przez Marylka na forum Szablony, wygląd, formatowanie
    Odpowiedzi: 6
    Ostatni post/autor: 24-01-2010, 15:02
  3. problem z nową pozycją menu i jej parametrami
    przez luzaik na forum Administracja Joomla!
    Odpowiedzi: 27
    Ostatni post/autor: 02-09-2008, 17:08
  4. Własne ID dla każdej pozycji w menu
    przez webpracownia na forum Szablony graficzne
    Odpowiedzi: 2
    Ostatni post/autor: 30-04-2008, 21:39
  5. Wybór templatki (strona główna)
    przez pisi na forum Szablony graficzne
    Odpowiedzi: 1
    Ostatni post/autor: 08-03-2007, 09:08

Reguły pisania

  • Nie możesz zakładać nowych tematów
  • Nie możesz dodawać wypowiedzi
  • Nie możesz dodawać załączników
  • Nie możesz poprawiać swoich postów
  •