Změna pořádí údajů
Za zobrazení článků je zodpovědná funkce show, která se nachází kolem řádku 430 v souboru content.html.php v adresáři components/com_content(v tomto adresáři se budeme po zbytek článku pohubovat). Tato funkce určuje jak se články budou zobrazovat nejen v zobrazení BlogSection/Category, ale i samotné zobrazení článků.
Formátování se týká část od první tabulky kolem řádku 458. Zde v jediném řádku této tabulky vidíme popořadě funkce, které zobrazují Titulek článku, ikonu pdf, ikonu tisku a e-mailovou ikonu. Za podmínkou } else if ( $access->canEdit ) { následuje kód, který, pokud je uživatel autorizován zobrazí ikonu pro editaci článků. Při troše přemýšlení si tedy můžeme změnit zobrazení titulku, že třeba dáme ikonu pro editaci, dáme před název článků. Zde se ale skrývá trošku chyták. Někoho by totiž mohlo svádět změnit umístění celé podmínky else if ale za zobrazení této ikony je zobrazení Blog zodpobědný kód ve funkci Title, která se nachází o kousek níže na řádku 602.
<td class="contentheading<?php echo $params->get( 'pageclass_sfx' ); ?>" width="100%">
<?php HTML_content::EditIcon( $row, $params, $access ); ?>
<a href="<?php echo $row->link_on;?>" class="contentpagetitle<?php echo $params->get( 'pageclass_sfx' ); ?>">
<?php echo $row->title;?></a>
</td>
<?php
} else {
?>
<td class="contentheading<?php echo $params->get( 'pageclass_sfx' ); ?>" width="100%">
<?php HTML_content::EditIcon( $row, $params, $access ); ?>
<?php echo $row->title;?>
</td>
Zde jsem červeně vybarvil řádky, které jsem změnil, aby se ikona pro editaci zobrazila před nadpisem článku.
Standartně se hodnocení článků zobrazuje pod titulkem, ale nad jménem sekce, či kategorie. Pokud vám to nevyhovuje, lze to velmi jednoduše změnit:
<table class="contentpaneopen<?php echo $params->get( 'pageclass_sfx' ); ?>">
<?php
// displays Section & Category
HTML_content::Section_Category( $row, $params );
HTML_content::Hits ( $row, $params );
$results = $_MAMBOTS->trigger( 'onBeforeDisplayContent', array( &$row, &$params, $page ) );
echo "<tr><td colspan=\"2\">".trim( implode( "\n", $results ) )."</td></tr>";
// displays Author Name
HTML_content::Author( $row, $params );
// displays Created Date
//HTML_content::CreateDate( $row, $params );
HTML_content::PublishDate( $row, $params );
HTML_content::ModifiedDate( $row, $params );
O hodnocení článků se stará Mambot, který má nastaveno zobrazení před článkem(onBeforeDisplayContent), tento kód stačí přesunout pod řádek HTML_content::Section_Category a řádek echo upravit způsobem, jak je zde ukázáno. Dále si všimněte červených řádků. Řádek Hits je jméno funkce, která zobrazí kolikrát byl daný článek přečtený. Ve spodní části výpisu je také vidět, že jsem zakomentoval zobrazení data vytvoření článku a místo něj přidal datum publikování článků. Obě funkce si hned ukážeme.
Nové funkce
Nejprve si ukážeme jednodušší funkci zobrazující datum publikování:
function PublishDate( &$row, &$params ) {
$publish_date = null;
if ( intval( $row->publish_up ) != 0 ) {
$publish_date = mosFormatDate( $row->publish_up );
}
?>
<tr>
<td valign="top" colspan="2" class="createdate">
<?php echo $publish_date; ?>
</td>
</tr>
<?php
}
Tady je zajímavý červený řádek. Jak vidíme zobrazení data určuje funkce mosFormatDate, která je definovaná v souboru include/joomla.php(řádek 3657) jako function mosFormatDate( $date, $format="", $offset=NULL ). Z tohoto zápisu lze poznat,že funkce jako první parametr bere hodnotu data. Druhým parametrem je formát data a třetí je offset. Z čehož vyplývá, že stačí do červeného řádku přidat požadovaný formát data. Pokud tedy chceme aby se zobrazoval i čas publikování článků stačí řádek upravit do této podoby:
$publish_date = mosFormatDate( $row->created, "%d %B %Y %H:%M:%S" );
a ukáže se nám datum i čas publikování, nebo třeba vytvoření článku. Pro vytvoření článků si stačí kolem řádku 811 najít funkci CreateDate a pro Aktualizaci ModifiedDate(řádek 830) a upravit odpovídající řádek naznačeným způsobem.
Další o něco složitější funkce je Hits:
function Hits( &$row, &$params ) {
$hits = null;
$hits = $row->hits ;
?>
<tr>
<td valign="top" colspan="2" class="hits">
<?php echo _HEADER_HITS .': '.$row->hits; ?>
</td>
</tr>
<?php
}
Mimo přidání této funkce ke konci souboru content.html.php je potřeba ještě jedné úpravy v souboru content.php, protože jinak se bude zobrazovat pouze 0. Ono místo se nachází v okolí řádku 1727:
// needed for caching purposes to stop different cachefiles being created for same item
// does not affect anything else as hits data not outputted
// $row->hits = 0;
Červený řádek je potřeba zakomentovat, protože hodnotu hitů, neboli přečtení stránky z důvodů cache,aby zabránil tvorbě rozdílných cache souborů pro stejný článek, je tato hodnota nulovaná což my ale nepotřebujeme.
To ale pořád není všechno. Ještě je třeba doplnit načtení tohoto sloupce z databáze. K tomu si musíme v tomtéž souboru najít nejprve funkci frontpage(stará se o titulní stránku) a kolem řádku 202 jí upravit takto:
$query = "SELECT a.id, a.title, a.title_alias, a.introtext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a
.modified_by,"
. "\n a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.images, a.urls, a.ordering, a.metakey, a.metadesc, a.access, a.hits,"
. "\n CHAR_LENGTH( a.fulltext ) AS readmore, u.name AS author, u.usertype, s.name AS section, cc.name AS category, g.name AS groups"
Přidaná položka je zobrazena červeně.
Další úprava je okolo řádku 680:
$query = "SELECT a.id, a.title, a.title_alias, a.introtext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by,"
. "\n a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.images, a.urls, a.ordering, a.metakey, a.metadesc, a.access, a.hits,"
. "\n CHAR_LENGTH( a.fulltext ) AS readmore, u.name AS author, u.usertype, s.name AS section, cc.name AS category, g.name AS groups"
Řádek 802:
$query = "SELECT a.id, a.title, a.title_alias, a.introtext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by, a.hits,"
. "\n a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.images, a.urls, a.ordering, a.metakey, a.metadesc, a.access,"
. "\n CHAR_LENGTH( a.fulltext ) AS readmore, s.published AS sec_pub, cc.published AS sec_pub, u.name AS author, u.usertype, s.name AS section, cc.name AS category, g.name AS groups"
A konečně poslední řádek 1415:
$query = "SELECT a.*, a.hits, u.name AS author, u.usertype, cc.name AS category, s.name AS section, g.name AS groups,"
. "\n s.published AS sec_pub, cc.published AS cat_pub, s.access AS sec_access, cc.access AS cat_access,"
. "\n s.id AS sec_id, cc.id as cat_id"
Změna řazení článků
Na závěr si ukážeme ještě jednu drobnou změnu, pokud nám nevyhovuje řazení článků podle data vytvoření článků a chtěli bychom řadit podle data publikace článku. K tomu si najdeme funkci _orderedby_sec na řádku 2438 v souboru content.php:
function _orderby_sec( $orderby ) {
switch ( $orderby ) {
case 'date':
$orderby = 'a.publish_up';
break;
case 'rdate':
$orderby = 'a.publish_up DESC';
break;
case 'alpha':
a text a.created můžeme nahradit za a.publish_up.
Doufám, že se mi podařilo úpravy popsat dobře. Pokud vám něco není jasné, tak se zeptejte v diskusi pod článkem a já vám rád odpovím.