Ankündigung

Einklappen
Keine Ankündigung bisher.

Joomla 3.X - Pagebreak Slider

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Joomla 3.X - Pagebreak Slider

    Guten Morgen,
    ganz neu dabei, starte ich direkt mit einer Frage:

    ich möchte eine Akkordeon Funktion in Joomla 3 (Bordmittel) so modifizieren, dass einzelne Textbereiche gleichzeitig geöffnet bleiben und der User die Entscheidung treffen kann, welche Texte angezeigt, welche geschlossen bleiben.

    Das steuernde PHP durchdringe ich nicht wirklich, bzw. mir fehlt der Ansatz für die Modiizierung.

    Ich würde mich sehr freuen, wenn ich auf Etensions verzichten kann und die gewünschte Funktion mit Bordmitteln umsetzen kann.

    Die PHP-Datei:

    PHP-Code:
    <?php

    defined
    ('_JEXEC') or die;

    jimport('joomla.utilities.utility');


    class 
    PlgContentPagebreak extends JPlugin
    {

        protected 
    $autoloadLanguage true;


        public function 
    onContentPrepare($context, &$row, &$params$page 0)
        {
            
    $canProceed $context == 'com_content.article';

            if (!
    $canProceed)
            {
                return;
            }

            
    $style $this->params->get('style''pages');

            
    // Expression to search for.
            
    $regex '#<hr(.*)class="system-pagebreak"(.*)\/>#iU';

            
    $input JFactory::getApplication()->input;

            
    $print $input->getBool('print');
            
    $showall $input->getBool('showall');

            if (!
    $this->params->get('enabled'1))
            {
                
    $print true;
            }

            if (
    $print)
            {
                
    $row->text preg_replace($regex'<br />'$row->text);

                return 
    true;
            }

            
    // Simple performance check to determine whether bot should process further.
            
    if (JString::strpos($row->text'class="system-pagebreak') === false)
            {
                return 
    true;
            }

            
    $view $input->getString('view');
            
    $full $input->getBool('fullview');

            if (!
    $page)
            {
                
    $page 0;
            }

            if (
    $params->get('intro_only') || $params->get('popup') || $full || $view != 'article')
            {
                
    $row->text preg_replace($regex''$row->text);

                return;
            }

            
    // Find all instances of plugin and put in $matches.
            
    $matches = array();
            
    preg_match_all($regex$row->text$matchesPREG_SET_ORDER);

            if ((
    $showall && $this->params->get('showall'1)))
            {
                
    $hasToc $this->params->get('multipage_toc'1);

                if (
    $hasToc)
                {
                    
    // Display TOC.
                    
    $page 1;
                    
    $this->_createToc($row$matches$page);
                }
                else
                {
                    
    $row->toc '';
                }

                
    $row->text preg_replace($regex'<br />'$row->text);

                return 
    true;
            }

            
    // Split the text around the plugin.
            
    $text preg_split($regex$row->text);

            
    // Count the number of pages.
            
    $n count($text);

            
    // We have found at least one plugin, therefore at least 2 pages.
            
    if ($n 1)
            {
                
    $title    $this->params->get('title'1);
                
    $hasToc $this->params->get('multipage_toc'1);

                
    // Adds heading or title to <site> Title.
                
    if ($title)
                {
                    if (
    $page)
                    {
                        if (
    $page && @$matches[$page 1][2])
                        {
                            
    $attrs JUtility::parseAttributes($matches[$page 1][1]);

                            if (@
    $attrs['title'])
                            {
                                
    $row->page_title $attrs['title'];
                            }
                        }
                    }
                }

                
    // Reset the text, we already hold it in the $text array.
                
    $row->text '';

                if (
    $style == 'pages')
                {
                    
    // Display TOC.
                    
    if ($hasToc)
                    {
                        
    $this->_createToc($row$matches$page);
                    }
                    else
                    {
                        
    $row->toc '';
                    }

                    
    // Traditional mos page navigation
                    
    $pageNav = new JPagination($n$page1);

                    
    // Page counter.
                    
    $row->text .= '<div class="pagenavcounter">';
                    
    $row->text .= $pageNav->getPagesCounter();
                    
    $row->text .= '</div>';

                    
    // Page text.
                    
    $text[$page] = str_replace('<hr id="system-readmore" />'''$text[$page]);
                    
    $row->text .= $text[$page];

                    
    // $row->text .= '<br />';
                    
    $row->text .= '<div class="pager">';

                    
    // Adds navigation between pages to bottom of text.
                    
    if ($hasToc)
                    {
                        
    $this->_createNavigation($row$page$n);
                    }

                    
    // Page links shown at bottom of page if TOC disabled.
                    
    if (!$hasToc)
                    {
                        
    $row->text .= $pageNav->getPagesLinks();
                    }

                    
    $row->text .= '</div>';
                }
                else
                {
                    
    $t[] = $text[0];

                    
    $t[] = (string) JHtml::_($style '.start''article' $row->id '-' $style);

                    foreach (
    $text as $key => $subtext)
                    {
                        if (
    $key >= 1)
                        {
                            
    $match $matches[$key 1];
                            
    $match = (array) JUtility::parseAttributes($match[0]);

                            if (isset(
    $match['alt']))
                            {
                                
    $title    stripslashes($match['alt']);
                            }
                            elseif (isset(
    $match['title']))
                            {
                                
    $title    stripslashes($match['title']);
                            }
                            else
                            {
                                
    $title    JText::sprintf('PLG_CONTENT_PAGEBREAK_PAGE_NUM'$key 1);
                            }

                            
    $t[] = (string) JHtml::_($style '.panel'$title'article' $row->id '-' $style $key);
                        }

                        
    $t[] = (string) $subtext;
                    }

                    
    $t[] = (string) JHtml::_($style '.end');

                    
    $row->text implode(' '$t);
                }
            }

            return 
    true;
        }

        
    /**
         * Creates a Table of Contents for the pagebreak
         *
         * @param   object   &$row      The article object.  Note $article->text is also available
         * @param   array    &$matches  Array of matches of a regex in onContentPrepare
         * @param   integer  &$page     The 'page' number
         *
         * @return  void
         *
         * @since  1.6
         */
        
    protected function _createTOC(&$row, &$matches, &$page)
        {
            
    $heading = isset($row->title) ? $row->title JText::_('PLG_CONTENT_PAGEBREAK_NO_TITLE');
            
    $input JFactory::getApplication()->input;
            
    $limitstart $input->getUInt('limitstart'0);
            
    $showall $input->getInt('showall'0);

            
    // TOC header.
            
    $row->toc '<div class="pull-right article-index">';

            if (
    $this->params->get('article_index') == 1)
            {
                
    $headingtext JText::_('PLG_CONTENT_PAGEBREAK_ARTICLE_INDEX');

                if (
    $this->params->get('article_index_text'))
                {
                    
    htmlspecialchars($headingtext $this->params->get('article_index_text'));
                }

                
    $row->toc .= '<h3>' $headingtext '</h3>';
            }

            
    // TOC first Page link.
            
    $class = ($limitstart === && $showall === 0) ? 'toclink active' 'toclink';
            
    $row->toc .= '<ul class="nav nav-tabs nav-stacked">
            <li class="' 
    $class '">

                <a href="' 
    JRoute::_(ContentHelperRoute::getArticleRoute($row->slug$row->catid) . '&showall=&limitstart=') . '" class="' $class '">'
                
    $heading .
                
    '</a>

            </li>
            '
    ;

            
    $i 2;

            foreach (
    $matches as $bot)
            {
                
    $link JRoute::_(ContentHelperRoute::getArticleRoute($row->slug$row->catid) . '&showall=&limitstart=' . ($i 1));

                if (@
    $bot[0])
                {
                    
    $attrs2 JUtility::parseAttributes($bot[0]);

                    if (@
    $attrs2['alt'])
                    {
                        
    $title    stripslashes($attrs2['alt']);
                    }
                    elseif (@
    $attrs2['title'])
                    {
                        
    $title    stripslashes($attrs2['title']);
                    }
                    else
                    {
                        
    $title    JText::sprintf('PLG_CONTENT_PAGEBREAK_PAGE_NUM'$i);
                    }
                }
                else
                {
                    
    $title    JText::sprintf('PLG_CONTENT_PAGEBREAK_PAGE_NUM'$i);
                }

                
    $class = ($limitstart == $i 1) ? 'toclink active' 'toclink';
                
    $row->toc .= '
                    <li>

                        <a href="' 
    $link '" class="' $class '">'
                        
    $title .
                        
    '</a>

                    </li>
                    '
    ;
                
    $i++;
            }

            if (
    $this->params->get('showall'))
            {
                
    $link JRoute::_(ContentHelperRoute::getArticleRoute($row->slug$row->catid) . '&showall=1&limitstart=');
                
    $class = ($showall == 1) ? 'toclink active' 'toclink';
                
    $row->toc .= '
                <li>

                        <a href="' 
    $link '" class="' $class '">'
                        
    JText::_('PLG_CONTENT_PAGEBREAK_ALL_PAGES') .
                        
    '</a>

                </li>
                '
    ;
            }

            
    $row->toc .= '</ul></div>';
        }

        
    /**
         * Creates the navigation for the item
         *
         * @param   object  &$row  The article object.  Note $article->text is also available
         * @param   int     $page  The total number of pages
         * @param   int     $n     The page number
         *
         * @return  void
         *
         * @since   1.6
         */
        
    protected function _createNavigation(&$row$page$n)
        {
            
    $pnSpace '';

            if (
    JText::_('JGLOBAL_LT') || JText::_('JGLOBAL_LT'))
            {
                
    $pnSpace ' ';
            }

            if (
    $page $n 1)
            {
                
    $page_next $page 1;

                
    $link_next JRoute::_(ContentHelperRoute::getArticleRoute($row->slug$row->catid) . '&showall=&limitstart=' . ($page_next));

                
    // Next >>
                
    $next '<a href="' $link_next '">' JText::_('JNEXT') . $pnSpace JText::_('JGLOBAL_GT') . JText::_('JGLOBAL_GT') . '</a>';
            }
            else
            {
                
    $next JText::_('JNEXT');
            }

            if (
    $page 0)
            {
                
    $page_prev $page == '' $page 1;

                
    $link_prev JRoute::_(ContentHelperRoute::getArticleRoute($row->slug$row->catid) . '&showall=&limitstart=' . ($page_prev));

                
    // << Prev
                
    $prev '<a href="' $link_prev '">' JText::_('JGLOBAL_LT') . JText::_('JGLOBAL_LT') . $pnSpace JText::_('JPREV') . '</a>';
            }
            else
            {
                
    $prev JText::_('JPREV');
            }

            
    $row->text .= '<ul><li>' $prev ' </li><li>' $next '</li></ul>';
        }
    }


  • #2
    http://www.php.de/php-einsteiger/543...produkten.html

    -> schon im Joomla-Forum versucht?
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Zitat von hausl Beitrag anzeigen
      Hallo, danke für den Hinweis (Fachfragen zu bestimmten Softwareprodukten).

      In sämtlichen Foren, die sich direkt mit Joomla befassen, geht es lediglich darum, diese Funktion zu nutzen, bzw. das Plugin korrekt zu aktivieren.

      Auch auf den Joomla Code/ Entwicklerseiten gibt es keinen Hinweis. Ich habe zwei Tage lang immer wieder danach gesucht.

      Ich denke, das PHP entsprechen zu modifizieren ist nicht die Intension der User, weil es etliche Plugins gibt - aber das sind Performance-Bremsen. Ich möchte gerne die native Funktion nutzen und by the way etwas PHP lernen...

      Kommentar


      • #4
        Das steuernde PHP durchdringe ich nicht wirklich, bzw. mir fehlt der Ansatz für die Modiizierung.
        Dann hast Du ein Problem. Das wird Dir hier niemand schreiben. Ohnehin ist es wenig empfehlenswert am Core eines Systems Anpassungen vorzunehmen.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Zitat von nikosch Beitrag anzeigen
          Dann hast Du ein Problem. Das wird Dir hier niemand schreiben. Ohnehin ist es wenig empfehlenswert am Core eines Systems Anpassungen vorzunehmen.
          Ok, danke, dann eben doch Plugin...

          Kommentar

          Lädt...
          X