A joomla CMS rendszer egyik leggyakrabban használt része a kategória megjelenités "blog" formában. Én is gyakran használom ezt a lehetőséget és sokat bosszankodtam két gyakran előforduló probléma miatt:
A Fenti hibákat igyekszik orvosolni az alábbi Joomla patch.
Joomla 3.4 rendszerben lett tesztelve.
A patch használja a "screen_width" session változót. responsive oldal készitésénél biztositani kell, hogy ebben az aktuális eszköz megjelenitőjének szélessége legyen pixelben. (a patch akkor is müködik ha nincs ilyen session változó, de ez esetben nem lesz responsive).
Licensz: GNU/GPL Szerző: Fogler Tibor Ez az e-mail-cím a szpemrobotok elleni védelem alatt áll. Megtekintéséhez engedélyeznie kell a JavaScript használatát.
components/com_content/views/category/tmpl/blog.php
<?php
/**
* @package Joomla.Site
* @subpackage com_content
*
* @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*
* FT.2015.03.01 javitott többhasáboss elrendezés: nincsenek lyukak az
* intro szövegek között akkor sem ha azon nem egyforma hosszúak.
* használt SESSION változó : screen_width
* rossz helyre betett readmore linkek javitására is kisérletet tesz
*/
defined('_JEXEC') or die;
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
JHtml::_('behavior.caption');
/**
* gyakori probléma, hogy a readmore link rossz helyen van
* ezért lezáratlan tag -ek vannak az introtext-ben
* ez a funkció a lezáratlan tag -eket lezárja
* a nyitó - lezáró tagok ileszkedését (tag overdrop) nem vizsgálja,
* csak a nyitó - záró tag számszerű egyezését állítja helyre
*/
function htmlRepair($subject) {
$pattern = '/<[^>]+>/';
$stack = array();
$i = 0;
$j = 0;
$talalt = preg_match($pattern,
$subject,
$matches, PREG_OFFSET_CAPTURE);
while (($talalt) & ($j<1000)) {
$tag = str_replace('<','',$matches[0][0]);
$tag = str_replace('>','',$tag);
$tag = trim($tag);
$i = $i + $matches[0][1] + 1;
if ($tag[0] == '/') {
// záró tag pop from stack
array_pop($stack);
} else if ($tag[strlen($tag)-1]=='/') {
// <... /> nincs vele dolgom
} else {
// nyitó tag push to stack
array_push($stack,$tag);
}
$j++;
$talalt = preg_match($pattern,
substr($subject,$i,strlen($subject)),
$matches, PREG_OFFSET_CAPTURE);
}
if (count($stack) > 0) {
// nyitott tag -ek lezárása
$subject .= '<!-- htmlPrepare -->';
for ($i = count($stack)-1; $i>=0; $i--) {
$w = explode(' ',$stack[$i]);
$subject .= '</'.$w[0].'>';
}
$subject .= '<!-- htmlPrepare -->';
}
return $subject;
}
?>
<div class="blog<?php echo $this->pageclass_sfx; ?>" itemscope itemtype="http://schema.org/Blog">
<?php if ($this->params->get('show_page_heading', 1)) : ?>
<div class="page-header">
<h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
</div>
<?php endif; ?>
<?php if ($this->params->get('show_category_title', 1) or $this->params->get('page_subheading')) : ?>
<h2> <?php echo $this->escape($this->params->get('page_subheading')); ?>
<?php if ($this->params->get('show_category_title')) : ?>
<span class="subheading-category"><?php echo $this->category->title; ?></span>
<?php endif; ?>
</h2>
<?php endif; ?>
<?php if ($this->params->get('show_cat_tags', 1) && !empty($this->category->tags->itemTags)) : ?>
<?php $this->category->tagLayout = new JLayoutFile('joomla.content.tags'); ?>
<?php echo $this->category->tagLayout->render($this->category->tags->itemTags); ?>
<?php endif; ?>
<?php if ($this->params->get('show_description', 1) || $this->params->def('show_description_image', 1)) : ?>
<div class="category-desc clearfix">
<?php if ($this->params->get('show_description_image') && $this->category->getParams()->get('image')) : ?>
<img src="/<?php echo $this->category->getParams()->get('image'); ?>" alt="<?php echo htmlspecialchars($this->category->getParams()->get('image_alt')); ?>"/>
<?php endif; ?>
<?php if ($this->params->get('show_description') && $this->category->description) : ?>
<?php echo JHtml::_('content.prepare', $this->category->description, '', 'com_content.category'); ?>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if (empty($this->lead_items) && empty($this->link_items) && empty($this->intro_items)) : ?>
<?php if ($this->params->get('show_no_articles', 1)) : ?>
<p><?php echo JText::_('COM_CONTENT_NO_ARTICLES'); ?></p>
<?php endif; ?>
<?php endif; ?>
<?php $leadingcount = 0; ?>
<?php if (!empty($this->lead_items)) : ?>
<div class="items-leading clearfix">
<?php foreach ($this->lead_items as &$item) : ?>
<div class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>"
itemprop="blogPost" itemscope itemtype="http://schema.org/BlogPosting">
<?php
$this->item = & $item;
$this->item->introtext = htmlrepair($this->item->introtext);
echo $this->loadTemplate('item');
?>
</div>
<?php $leadingcount++; ?>
<?php endforeach; ?>
</div><!-- end items-leading -->
<?php endif; ?>
<?php
$introcount = (count($this->intro_items));
$counter = 0;
?>
<?php if (!empty($this->intro_items)) : ?>
<?php
// kis képernyökön csak egy oszlopba irunk
$session = JFactory::getSession();
$screen_width = $session->get('screen_width');
if (($screen_width != '') & ($screen_width < 800)) {
$this->columns = 1;
}
$elemek = array();
for ($i=1; $i<=$this->columns; $i++)
$elemek[$i] = array();
$oszlop = 1;
foreach ($this->intro_items as $key => &$item) {
$elemek[$oszlop][] = $key;
$oszlop++;
if ($oszlop > $this->columns) $oszlop = 1;
}
for ($i=1; $i<=$this->columns; $i++) {
echo '<div style="float:left; width:'.(100/$this->columns).'%; ">';
if ($i < $this->columns)
echo '<div style="margin-right:20px;">';
else
echo '<div style="margin-right:0px;">';
foreach ($elemek[$i] as $elem) {
$this->item = & $this->intro_items[$elem];
echo $this->loadTemplate('item');
}
echo '</div>';
echo '</div>';
}
echo '<div style="clear:both"></div>';
?>
<?php /* foreach ($this->intro_items as $key => &$item) : ? >
<?php $rowcount = ((int) $key % (int) $this->columns) + 1; ? >
<?php if ($rowcount == 1) : ? >
<?php $row = $counter / $this->columns; ? >
<div class="items-row cols-<?php echo (int) $this->columns; ? > <?php echo 'row-' . $row; ? > row-fluid clearfix">
<?php endif; ? >
<div class="span<?php echo round((12 / $this->columns)); ? >">
<div class="item column-<?php echo $rowcount; ? ><?php echo $item->state == 0 ? ' system-unpublished' : null; ? >"
itemprop="blogPost" itemscope itemtype="http://schema.org/BlogPosting">
<?php
$this->item = & $item;
echo $this->loadTemplate('item');
? >
</div>
<!-- end item -->
<?php $counter++; ? >
</div><!-- end span -->
<?php if (($rowcount == $this->columns) or ($counter == $introcount)) : ? >
</div><!-- end row -->
<?php endif; ? >
<?php endforeach; */ ?>
<?php endif; ?>
<?php if (!empty($this->link_items)) : ?>
<div class="items-more">
<?php echo $this->loadTemplate('links'); ?>
</div>
<?php endif; ?>
<?php if (!empty($this->children[$this->category->id]) && $this->maxLevel != 0) : ?>
<div class="cat-children">
<?php if ($this->params->get('show_category_heading_title_text', 1) == 1) : ?>
<h3> <?php echo JTEXT::_('JGLOBAL_SUBCATEGORIES'); ?> </h3>
<?php endif; ?>
<?php echo $this->loadTemplate('children'); ?> </div>
<?php endif; ?>
<?php if (($this->params->def('show_pagination', 1) == 1 || ($this->params->get('show_pagination') == 2)) && ($this->pagination->get('pages.total') > 1)) : ?>
<div class="pagination">
<?php if ($this->params->def('show_pagination_results', 1)) : ?>
<p class="counter pull-right"> <?php echo $this->pagination->getPagesCounter(); ?> </p>
<?php endif; ?>
<?php echo $this->pagination->getPagesLinks(); ?> </div>
<?php endif; ?>
</div>