CMS Joomla w wersji 1.5.x powstała jeszcze w czasach (jak ten czas szybko biegnie), kiedy powszechnie używano tabel (znacznik <table>) do formatowania stron. Do dzisiaj metody tej używa budowany ,,od zera'' w latach 1999-2000 przez doskonałych programistów PCSS portal Programu INTERKL@SA. (system w tamtych latach był prestiżowo innowacyjny, zbudowany w oparciu o servelety Javy, bazujący na Oracle pełnił już wtedy rolę CMS-a z powszechnym dostępem do mechanizmów redakcyjnych.)
Dopiero od niedawna formatowanie za pomocą tebel w tekście uznawane jest to za metodę niekorzystną, niewydajną, nieelastyczną i.... wiele innych NIE.... Praktycznie taka metoda formatowania tekstu na stronie jest zdeprecjonowana.
Joomla 1.5 w wersji stabilnej i jej wszystkie uaktualnienia (obecnie na dzień dzisiejszy v. 1.5.20) komponenty generujące treść strony na podstawie danych z bazy posługują się również metodą formatowania treści za pomocą tabeli. Za twozrenie tego kodu ten odpowiadają pliki komponentów z folderów /components/com_content/views/
Gdyby ktoś chciał całkowicie pozbyć się tabel z kodu stron generowanych przez CMS Joomla powinien zmodyfikować pliki php z tego folderu. Dla osób znających php nie jest to żaden problem....
Pewnie, gdyby nie powstająca wersja 1.6 systemu Joomla (na dzień dzisiejszy dostępna do testów v. 1.6 BETA 8) sam zająłbym się odpowiednią modyfikacją tych plików. Pewnie zresztą nie musiałbym tego robić, bo zrobili by to inni developerzy.
Wersja 1.6 generuje treść już tylko na bazie formatowania przy pomocy CSS. Poniżej przykładowy kod pliku generującego treść artykułu z aktualnje wersji Beta Joomla 1.6:
<?php
/**
* @version $Id: default.php 18568 2010-08-21 18:34:12Z ian $
* @package Joomla.Site
* @subpackage com_content
* @copyright Copyright (C) 2005 - 2010 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 shortcut to parameters.
$params = $this->item->params;
?>
<div class="item-page<?php echo $params->get('pageclass_sfx')?>">
<?php if ($this->params->get('show_page_heading', 1)) : ?>
<h1>
<?php echo $this->escape($this->params->get('page_heading')); ?>
</h1>
<?php endif; ?>
<?php if ($params->get('show_title')|| $params->get('access-edit')) : ?>
<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 ($params->get('access-edit') || $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 ($this->user->authorise('core.edit', 'com_content.article.'.$this->item->id)) : ?>
<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', 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 = $params->get('link_author', 0) ? JHTML::_('link',JRoute::_('index.php?option=com_users&view=profile&member_id='.$this->item->created_by),$this->item->author) : $this->item->author; ?>
<?php $author=($this->item->created_by_alias ? $this->item->created_by_alias : $author);?>
<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
</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 echo $this->item->text; ?>
<?php echo $this->item->event->afterDisplayContent; ?>
</div>
PODSUMOWANIE:
Nic więc na siłę, jeśli niebawem problem będzie rozwiązany przez ludzi bardziej kompetentnych w sytuacji, kiedy już jest rozwiązywany. Poczekam i nie przeszkadza mi, że w serwisach jakie buduję na CMS JOOMLI pojawiają się znaczniki <table>.
Inni zrobią to lepiej, a ja czas poświęcę na zrobienie czegoś dobrego, czego nie będzie jeśli tego nie zrobię.
Alternatywne postawy:
-
ja jestem lepszy od innych i u mnie nie będzie ,,takich numerów'' z tabelkami (strony niekomercyjne)
-
warto klientowi pokazać, że jestem lepszy od innych, pzrecież mi płaci... To nic, że siedę godzinami nad problemem rozwiązywanym przez innych - klient nie powinien tego wiedzić.... przecież mi płaci... (strony dla klienta)
Szkoda, że nie zwraca się uwagi na te WAŻNIEJSZE elementy, jakie są najistotniejsze dla SENSU (!!!) i FUNKCJONALNOŚCI stron WWW od strony ich informacyjnej jaką mają spełniać.
Ale powszechność obecności w sieci ,,wodotrysków'', ,,kolorowych jarmarków'', absurdów funkcjonalności dla SEO i powszechny, niefunkcjonalny bałagan informacyjny to już inna bajka oraz dotyczy nie tylko Joomli.
Warto będzie temu poświęcić osobne artykuły.
|
Komentarze
Samo wrzucenie tekstu w tabelę nie jest zbrodnią. Po prostu są lepsze metody.
Nie jest też nawet obciachem. Są ważniejsze rzeczy - choćby web-usability. Wolę, aby strona miała w kodzie tabelki, niż abym musiał szukać linku do strony głównej, czy też, aby menu było zrobione we flashu, który mam zablokowany...
Oczywiście, brak tabel, czy też ich poprawne wykorzystywanie nie sprawia by strona była gorsza. Można zatem postawić na web-usability, sprawić, aby strona była dochodowa, a na dodatek jeszcze stworzyć kod html będący zgodny z nowoczesnymi - słusznymi - trendami.
Pamiętajmy jednak, że używając divów, też można zepsuć kod strony. Sam XHTML [najczęściej niepoprawny] nie jest lekiem na złą stronę :)
pozdrawiam