Skip to main content

Vraag Een override maken

  • Arjan
  • Arjan's Profielfoto Onderwerp Auteur
  • Offline
  • Platinum lid
  • Platinum lid
Meer
11 jaren 1 maand geleden #1616 door Arjan
Een override maken werd gestart door Arjan
Naar aanleiding van een opmerking van mij over een override kreeg ik de vraag; Waar heb jij het over?

Nou ik heb het er over dat Joomla een heel mooi systeem/programma is om iets, tekst, afbeeldingen, hyperlinken, enzovoort, in een database te stoppen maar dat het wel is gemaakt voor iedereen die er gebruik van zou willen maken.
Omdat niet bekend is wat Pietje in Amsterdam en Kim in Hongkong nu precies met Joomla willen gaan doen staat er heel veel code in die meestal niet eens gebruikt word. En code die je graag wilt hebben staat er juist niet in.

Voor de ontbrekende code kan je een module, plugin of component installeren maar je kan ook de originele bestanden van Joomla aanpassen. Dat aanpassen word een override genoemd.

Op mijn eigen site probeer ik zo min mogelijk code te gebruiken met in mijn achterhoofd de gedachten dat hoe minder er in de browser geladen moet worden des te sneller staat het in beeld. Waarschijnlijk komt dat door dat mijn eerste kennismaking met internet via een telefoonlijntje ging en iedere tik er weer één was. Behalve dat miste ik ook een "Ga 1 pagina terug knopje".

Om nu beide te realiseren kwam ik uit in de volgende map components\com_content\views\article\tmpl en dan het bestand default.php
Het volgende staat in dit bestand,
Code:
<?php /** * @package    Joomla.Site * @subpackage com_content * @copyright  Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. * @license    GNU General Public License version 2 or later; see LICENSE.txt */ // no direct access defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers'); // Create shortcuts to some parameters. $params    = $this->item->params; $images = json_decode($this->item->images); $urls = json_decode($this->item->urls); $canEdit = $this->item->params->get('access-edit'); $user    = JFactory::getUser(); ?> <div class="item-page<?php echo $this->pageclass_sfx?>"> <?php if ($this->params->get('show_page_heading')) : ?>   <h1>   <?php echo $this->escape($this->params->get('page_heading')); ?>   </h1> <?php endif; ?> <?php if (!empty($this->item->pagination) AND $this->item->pagination && !$this->item->paginationposition && $this->item->paginationrelative) { echo $this->item->pagination; } ?> <?php if ($params->get('show_title')) : ?>   <h2>   <?php if ($params->get('link_titles') && !empty($this->item->readmore_link)) : ?>       <a href="<?php echo $this->item->readmore_link; ?>">       <?php echo $this->escape($this->item->title); ?></a>   <?php else : ?>       <?php echo $this->escape($this->item->title); ?>   <?php endif; ?>   </h2> <?php endif; ?> <?php if ($canEdit ||  $params->get('show_print_icon') || $params->get('show_email_icon')) : ?>   <ul class="actions">   <?php if (!$this->print) : ?>       <?php if ($params->get('show_print_icon')) : ?>         <li class="print-icon">         <?php echo JHtml::_('icon.print_popup',  $this->item, $params); ?>         </li>       <?php endif; ?>       <?php if ($params->get('show_email_icon')) : ?>         <li class="email-icon">         <?php echo JHtml::_('icon.email',  $this->item, $params); ?>         </li>       <?php endif; ?>       <?php if ($canEdit) : ?>         <li class="edit-icon">         <?php echo JHtml::_('icon.edit', $this->item, $params); ?>         </li>       <?php endif; ?>   <?php else : ?>       <li>       <?php echo JHtml::_('icon.print_screen',  $this->item, $params); ?>       </li>   <?php endif; ?>   </ul> <?php endif; ?> <?php  if (!$params->get('show_intro')) :   echo $this->item->event->afterDisplayTitle; endif; ?> <?php echo $this->item->event->beforeDisplayContent; ?> <?php $useDefList = (($params->get('show_author')) or ($params->get('show_category')) or ($params->get('show_parent_category'))   or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date'))   or ($params->get('show_hits'))); ?> <?php if ($useDefList) : ?>   <dl class="article-info">   <dt class="article-info-term"><?php  echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt> <?php endif; ?> <?php if ($params->get('show_parent_category') && $this->item->parent_slug != '1:root') : ?>   <dd class="parent-category-name">   <?php $title = $this->escape($this->item->parent_title);   $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)).'">'.$title.'</a>';?>   <?php if ($params->get('link_parent_category') and $this->item->parent_slug) : ?>       <?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>   <?php else : ?>       <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>   <?php endif; ?>   </dd> <?php endif; ?> <?php if ($params->get('show_category')) : ?>   <dd class="category-name">   <?php    $title = $this->escape($this->item->category_title);   $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)).'">'.$title.'</a>';?>   <?php if ($params->get('link_category') and $this->item->catslug) : ?>       <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?>   <?php else : ?>       <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>   <?php endif; ?>   </dd> <?php endif; ?> <?php if ($params->get('show_create_date')) : ?>   <dd class="create">   <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC2'))); ?>   </dd> <?php endif; ?> <?php if ($params->get('show_modify_date')) : ?>   <dd class="modified">   <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC2'))); ?>   </dd> <?php endif; ?> <?php if ($params->get('show_publish_date')) : ?>   <dd class="published">   <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC2'))); ?>   </dd> <?php endif; ?> <?php if ($params->get('show_author') && !empty($this->item->author )) : ?>   <dd class="createdby">   <?php $author = $this->item->created_by_alias ? $this->item->created_by_alias : $this->item->author; ?>   <?php if (!empty($this->item->contactid) && $params->get('link_author') == true): ?>   <?php       $needle = 'index.php?option=com_contact&view=contact&id=' . $this->item->contactid;       $menu = JFactory::getApplication()->getMenu();       $item = $menu->getItems('link', $needle, true);       $cntlink = !empty($item) ? $needle . '&Itemid=' . $item->id : $needle;   ?>       <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', JRoute::_($cntlink), $author)); ?>   <?php else: ?>       <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>   <?php endif; ?>   </dd> <?php endif; ?> <?php if ($params->get('show_hits')) : ?>   <dd class="hits">   <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>   </dd> <?php endif; ?> <?php if ($useDefList) : ?>   </dl> <?php endif; ?> <?php if (isset ($this->item->toc)) : ?>   <?php echo $this->item->toc; ?> <?php endif; ?> <?php if (isset($urls) AND ((!empty($urls->urls_position) AND ($urls->urls_position=='0')) OR  ($params->get('urls_position')=='0' AND empty($urls->urls_position) ))       OR (empty($urls->urls_position) AND (!$params->get('urls_position')))): ?> <?php echo $this->loadTemplate('links'); ?> <?php endif; ?> <?php if ($params->get('access-view')):?> <?php  if (isset($images->image_fulltext) and !empty($images->image_fulltext)) : ?> <?php $imgfloat = (empty($images->float_fulltext)) ? $params->get('float_fulltext') : $images->float_fulltext; ?> <div class="img-fulltext-<?php echo htmlspecialchars($imgfloat); ?>"> <img   <?php if ($images->image_fulltext_caption):       echo 'class="caption"'.' title="' .htmlspecialchars($images->image_fulltext_caption) .'"';   endif; ?>   src="<?php echo htmlspecialchars($images->image_fulltext); ?>" alt="<?php echo htmlspecialchars($images->image_fulltext_alt); ?>"/> </div> <?php endif; ?> <?php if (!empty($this->item->pagination) AND $this->item->pagination AND !$this->item->paginationposition AND !$this->item->paginationrelative):   echo $this->item->pagination; endif; ?> <?php echo $this->item->text; ?> <?php if (!empty($this->item->pagination) AND $this->item->pagination AND $this->item->paginationposition AND!$this->item->paginationrelative):     echo $this->item->pagination;?> <?php endif; ?> <?php if (isset($urls) AND ((!empty($urls->urls_position)  AND ($urls->urls_position=='1')) OR ( $params->get('urls_position')=='1') )): ?> <?php echo $this->loadTemplate('links'); ?> <?php endif; ?>   <?php //optional teaser intro text for guests ?> <?php elseif ($params->get('show_noauth') == true and  $user->get('guest') ) : ?>   <?php echo $this->item->introtext; ?>   <?php //Optional link to let them register to see the whole article. ?>   <?php if ($params->get('show_readmore') && $this->item->fulltext != null) :       $link1 = JRoute::_('index.php?option=com_users&view=login');       $link = new JURI($link1);?>       <p class="readmore">       <a href="<?php echo $link; ?>">       <?php $attribs = json_decode($this->item->attribs);  ?>       <?php       if ($attribs->alternative_readmore == null) :         echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE');       elseif ($readmore = $this->item->alternative_readmore) :         echo $readmore;         if ($params->get('show_readmore_title', 0) != 0) :             echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));         endif;       elseif ($params->get('show_readmore_title', 0) == 0) :         echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE');       else :         echo JText::_('COM_CONTENT_READ_MORE');         echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));       endif; ?></a>       </p>   <?php endif; ?> <?php endif; ?> <?php if (!empty($this->item->pagination) AND $this->item->pagination AND $this->item->paginationposition AND $this->item->paginationrelative):     echo $this->item->pagination;?> <?php endif; ?> <?php echo $this->item->event->afterDisplayContent; ?> </div>
en telt in totaal 219 regels. Vele daar van gebruik ik niet en ik mis hier in ook het html5 wat uiteindelijk de nieuwe standaard gaat worden.
Dus ik heb het aangepast naar dit,
Code:
<?php defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers'); // De tooltip in alle pagina's verwerkt! JHtml::_('behavior.tooltip'); // Parameters. $params    = $this->item->params; $canEdit = $this->item->params->get('access-edit'); $user    = JFactory::getUser(); ?> <article class="artikel"><h1><?php echo $this->escape($this->item->title); ?> geschreven door Arjan Roosemalen</h1>   <header id="artikel_hoofd"><h1>Hoofd van <?php echo $this->escape($this->item->title); ?></h1>       <div id="h2">         <h2><?php echo $this->escape($this->item->title); ?></h2>       </div>       <div id="iconen">         <ul class="actions">             <?php if ($params->get('show_print_icon')) : ?>             <li class="print-icon">               <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?>             </li>             <?php endif; ?>             <?php if ($params->get('show_email_icon')) : ?>             <li class="email-icon">               <?php echo JHtml::_('icon.email', $this->item, $params); ?>             </li>             <?php endif; ?>             <?php if ($canEdit) : ?>             <li class="edit-icon">               <?php echo JHtml::_('icon.edit', $this->item, $params); ?>             </li>             <?php endif; ?>             <li class="ga_terug_knop">               <a href="javascript:history.go(-1)">               <img src="http://www.roosemalen.nl/templates/dekjam/images/terug.png" alt="Vorige pagina" title="Vorige pagina" />               </a>             </li>         </ul>       </div>   </header>   <section id="artikel_tekst"><h1><?php echo $this->escape($this->item->title); ?> tekst</h1>       <?php echo $this->item->text; ?>   </section>   <footer id="artikel_eind"><h1><?php echo $this->escape($this->item->title); ?> voettekst</h1>       <div id="datum"><?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC2'))); ?></div>       <?php echo $this->item->event->afterDisplayContent; ?>   </footer> </article>
wat nog maar 48 regels zijn en alles heeft wat ik nodig vind. Zelfs het "Ga 1 pagina terug knopje"
Kijk hier maar!

Als je nu het bestand default.php verandert in de map components\com_content\views\article\tmpl en er komt een update van Joomla die iets doet met dat bestand dan ben je weer bij af en mag je opnieuw de code induiken.

Daarom plaatsen we dit bestand in een aparte map in je templatemap. Misschien heb je die map al wel eens gezien want hij komt bij meerdere tempates voor.

De map heet html en daarin plaatsen we de map com_content. Daar plaatsen we weer de map article in en daar gaat dan de aangepaste default .php in. Joomla kijkt eerst of er een map html is in je template en kijkt dan wat er in staat. Alles wat daar instaat heeft voorrang op de orginele bestanden van Joomla. Joomla updates hebben op die map geen invloed.

Lekker ontspannen mensen helpen met hun website problemen.

Graag Inloggen of een account aanmaken deelnemen aan het gesprek.

Meer
11 jaren 1 maand geleden #1618 door Cristina
Beantwoord door Cristina in topic Re: Een override maken
ok! dank je voor je mooie uitleg !!
Maar... ik ben altijd bang dat ik iets weghaalt wat niet weg moet, ik zal er aandacht naar kijken en ook proberen te "verkleinen".
Misschien een stomme vragen maar:
geldt dit alleen voor de default of voor meerdere bestanden??
en als ik die map in de template plaats moet die andere weg???



Met honing bereik je meer dan met azijn :)

Graag Inloggen of een account aanmaken deelnemen aan het gesprek.

  • Arjan
  • Arjan's Profielfoto Onderwerp Auteur
  • Offline
  • Platinum lid
  • Platinum lid
Meer
11 jaren 1 maand geleden #1620 door Arjan
Beantwoord door Arjan in topic Extra uitleg

Maar... ik ben altijd bang dat ik iets weghaalt wat niet weg moet

Als jij eerst het bestand in de map html\com_content\article in je templatemap zet dan gebeurt er niets met het originele bestand. En kan je dus naar hartenlust weggooien en zo.

geldt dit alleen voor de default of voor meerdere bestanden??

Haalt als het goed is niet uit welk component je wilt aanpassen of welk bestand. Let alleen wel op hoe je hem dan plaatst in de map html. het gedeelte com_contact kan je ook aanpassen maar hoort niet in com_content te staan.

en als ik die map in de template plaats moet die andere weg???

Zo als ik al zij zit er in de meeste templates al een map html. Nu weet ik niet wat daar bij jouw instaat maar misschien hebben hun ook al de com_content aangepast. Plaats de mappen waar de bestanden in staan waar je mee wilt gaan "spelen" even buiten de map html (kopieeren) en ga dan naar hartenlust bezig. Je kan dan altijd de originele bestanden weer terug plaatsen!

Overigens is het volgende misschien een handige tip tijdens het spelen/zoeken
Code:
<?php if ($params->get('show_title')) : ?>   <h2>   <?php if ($params->get('link_titles') && !empty($this->item->readmore_link)) : ?>       <a href="<?php echo $this->item->readmore_link; ?>">       <?php echo $this->escape($this->item->title); ?></a>   <?php else : ?>       <?php echo $this->escape($this->item->title); ?>   <?php endif; ?>   </h2> <?php endif; ?>
Hier staat een stukje wat zegt hoe er een titel getoond moet worden als hij getoond moet worden. Je ziet daar ook de code <h2> staan en die word weer afgesloten met </h2>
Als je nu net na die <h2> een een tekst zet, lekker ding of zo, en het verschijn in beeld als je de webpagina ververst dan weet je dat je in het goede stukje aan het zoeken bent.

Succes

Lekker ontspannen mensen helpen met hun website problemen.

Graag Inloggen of een account aanmaken deelnemen aan het gesprek.

Tijd voor maken pagina: 0.455 seconden
Gemaakt door Kunena