Nakrmte vyhledávače archívy

MyEgo.cz

home foto blogy mywindows.cz kontakt

Nakrmte vyhledávače archívy

Napsal jsem pro BLOG:CMS triviální plugin, který na stránce archívů vypíše abecední seznam všech existujících článků členěných podle skupin kategorií a subkategorií. Je to dobrá „potrava“ pro vyhledávače, a domnívám se, že rovněž pro čtenáře…

Kód pluginu NP_AllItems.php

<?php
/**
  * BLOG:CMS: Personal Content Management System 
  * http://blogcms.com/
  *
  * Radek HULAN, 2006
  * http://hulan.cz/
**/

class NP_AllItems extends NucleusPlugin {

	function getName() {   return 'AllItems';    }
	function getAuthor()  { return 'Radek HULAN'; }
	function getURL() { return 'http://hulan.cz/'; }
	function getVersion() {   return '1.0'; }
	function getDescription() { return 'This plugin displays all items.'; }
	function supportsFeature($f) { return ($f == 'SqlTablePrefix') ? 1 : 0; }

	function doSkinVar($skinType) {
		global $blog, $catid;
		$blogid = $blog->getID();
		if (intval($catid))
			$catfilter = " AND c.catid = $catid ";
		else
			$catfilter = '';
		$query = sql_query(
				'SELECT s.name as catgroup, c.cname as catname, i.inumber AS id, i.ititle AS title, UNIX_TIMESTAMP(itime) AS published '.
				'FROM '.sql_table('item').' i, '.sql_table('subcategory').' s, '.sql_table('category').' c '.
				'WHERE s.blogid='.$blogid.' AND s.groupid=c.cgroup AND c.catid = i.icat '.$catfilter.' AND i.idraft=0 '.
				'ORDER by catgroup, catname, title ASC');
		$catgroup = '';
		$catname = '';
		while ($row = sql_fetch_object($query)) {
			// category name
			if ($catname != $row->catname) {
				if ($catname)
					echo '</table>';
				// category group
				if ($catgroup != $row->catgroup) {
					echo '<h4>', htmlspecialchars(sql_unescape($row->catgroup)), '</h4>';
					$catgroup = $row->catgroup;
				}
				echo '<h5>', htmlspecialchars(sql_unescape($row->catname)), '</h5>';
				$catname = $row->catname;
				echo '<table><tr><th style="width:330px">Článek</th><th style="width:80px">Publikováno</th><th style="width:80px">Čteno</th></tr>';
			}
			// article
			$viewed = intval(quickQuery('SELECT views as result FROM '.sql_table('plugin_views').' WHERE id='.$row->id)). 'x';
			echo '<tr><td><a href="'.createItemLink($row->id).'">', sql_unescape($row->title), '</a></td><td>', date("d.m.y",$row->published), "</td><td>$viewed</td></tr>\n";
		}
		if ($catname)
			echo "</table>\n";
	}
}
?>

Komentáře

  1. 1 dgx 05.12.06, 05:12:07
    FB

    Radku, proč data vytažená z databáze "unescapuješ", viz volání sql_unescape(...) ?

  2. 2 Radek Hulán 05.12.06, 01:12:00
    FB

    [1] některé DB to potřebují, je to z důvodu konzistence

  3. 3 dgx 05.12.06, 03:12:40
    FB

    Stáhl jsem si BLOGCMS, koukl do zdrojáků, říkám to nerad, ale tvoříš v omylu. Řetězce se escapují, aby je bylo možno zakomponovat jako součást SQL příkazu, ale z databáze se dostávají v čisté podobě. Použití stripslashes() pro MySQL je operace navíc, tj. nikoliv zbytečná, ale kontraproduktivní. Fakt si to vyzkoušej na malém příkladě.

  4. 4 Radek Hulán 05.12.06, 04:12:28
    FB

    [3] souhlas, v db.php by stripslashes() u mysql(i) chtělo dát pryč..

  5. 5 Onecar 05.12.06, 05:12:45
    FB

    Radku, je to hodně dobrý, ale názvy kategorií by mohly být jako odkaz (záložka), abych mohl na nějakou takovou sekci pěkně zaodkazovat a neříkat "sescrolluj dolů".

  6. 6 zombux 07.12.06, 03:12:36
    FB

    díky, to vypadá výborně. ještě jsem neměl čas to zkusit implementovat, tak se zeptám rovnou - jak je to s podporou u starších verzí BLOG:CMS?

  7. 7 Radek Hulán 07.12.06, 03:12:38
    FB

    [6] mělo by stačit to instalovat a na stránce archívů zavolat <%AllItems%>

  8. 8 zombux 09.12.06, 04:12:23
    FB

    [7] funguje to, děkuji :)