Um eine Zusammenfassung zu erstellen, müssen Sie folgendes tun

Werbung
Um eine Zusammenfassung zu erstellen, müssen Sie folgendes tun:
•
•
•
•
•
•
•
•
Erstellen Sie ein Template für die Details. Meines habe ich
cms_userdef_site_summary_bit benannt.
Erstellen Sie ein Template für die komplette Zusammenfassung. Meines habe ich
cms_userdef_site_summary benannt.
Erstellen Sie ein PHP-Modul und benennen Sie es. Geben Sie eine Timeout-Periode für
das Cachen ein, ich habe „60“ eingeben. Somit wird jede Stunde eine Abfrage
ausgeführt.
Geben Sie darunter den PHP-Code ein.
Geben Sie darunter einen Vorschau-Code ein. Ich will nur einen Titel anzeigen lassen,
und habe daher dies eingegeben:
$output = 'Seiten-Zusammenfassung';
oder
$output = 'Folgen Sie diesem Link für eine Zusammenfassung der aktuellen
Inhalte';
Bei Bedarf können Sie auch die URL zu einer Grafik einfügen, welche in der Vorschau
angezeigt werden soll.
Veröffentlichen
Inhalt (PHP-Code)
/***
FALLS SIE KEIN PHP-PROGRAMMIERER SIND:
Führen Sie erst dann Änderungen durch, sobald Sie alles durchgelesen haben und wissen was
zu ändern ist!
Falls Fehler auf Ihrer Seite auftreten – Sie wurden gewarnt!
***/
/**
Mit diesem Code wird eine Zusammenfassung Ihrer Seite erstellt.
Für jeden Bereich erhalten Sie die typische Artikelseite für einen Artikel und darunter die Namen
der restlichen Artikel als Links. Als Standard werden 5 Artikel angezeigt. Sie können diesen
Wert unter $articlecount anpassen.
$sections gibt die Werte der Bereich-IDs an. Tragen Sie hier nur etwas ein, falls Sie sich sicher
sind. Die Liste muss durch Kommata getrennt werden, zB:
$sections = array(1, 3, 4, 5);
Leerzeichen sind erlaubt, aber nicht erforderlich. Vergessen Sie nicht den Strichpunkt am Ende.
**/
$sections = array();
/**
Falls Sie festlegen wollen, welche Artikel in der Vorschau angezeigt werden sollen, können Sie
diese Information hier eingeben. Falls Sie also den Artikel mit der ID 5 als Vorschau des
Bereichs 1 und den Artikel mit der ID 5 als Vorschau des Bereichs 3 anzeigen lassen wollen,
müssen Sie folgendes eingeben:
$sectionleads = array(1 => 5, 3 =>7);
Vergessen Sie nicht den Strichpunkt.
**/
$sectionleads = array();
/**
Standardmäßig werden die Titel für fünf Artikel generiert. Die Vorschau für die entsprechenden
Bereiche sind nicht inkludiert. Falls Sie die Anzahl der Artikel ändern wollen, können Sie den
Wert unterhalb anpassen.
**/
$article_count = 5;
/** Standardmäßig werden maximal acht Bereiche angezeigt. Sie können den Wert hier ändern.
**/
$section_count = 8;
/** Falls es keine Liste der Bereiche gibt, brauchen wir noch eine. Diese Liste brauchen wir,
damit die Inhalte korrekt angezeigt werden können.
Standardmäßig werden nur Inhalte angezeigt, welche auch Gäste sehen dürfen. Falls Sie das
ändern wollen, können Sie hier eine andere Benutzer-ID eingeben.
**/
$perms_user = 0;
/** Ab jetzt sollten Sie wirklich nur mehr Änderungen durchführen, wenn Sie ein PHPProgrammierer sind.
***/
$section_typeid = vB_Types::instance()->getContentTypeID('vBCms_Section');
$permission_clause = vBCMS_Permissions::getPermissionString($perms_user);
$sql = "SELECT node.nodeid, info.title, node.url FROM " . TABLE_PREFIX . "cms_node AS
node
INNER JOIN " . TABLE_PREFIX . "cms_nodeinfo AS info ON info.nodeid = node.nodeid
WHERE contenttypeid = $section_typeid " .
(empty($sections) ? '' : " AND nodeid in (" . implode($sections , ',') . ")") .
" AND $permission_clause ORDER BY setpublish DESC " ;
$rst = vB::$db->query_read($sql);
$counter = 0;
$results = array();
while($section = vB::$db->fetch_array($rst))
{
/** Jetzt haben wir die Bereiche, machen wir mit dem Inhalt weiter.
Dafür brauchen wir mehr Abfragen als mir lieb ist, doch es gibt keinen anderen Weg.
Zum Glück lassen sich diese Abfragen schnell ausführen.
*
*Achtung mit der nächsten Abfrage. Falls wir uns in der nächsten Abfrage selbst nicht
ausschließen, enden wir ein einer Endlosschleife
**/
$sectionid = $section['nodeid'];
$sql = "SELECT node.nodeid, node.url, node.contenttypeid, info.title FROM " .
TABLE_PREFIX .
"cms_node AS node INNER JOIN " . TABLE_PREFIX . "cms_nodeinfo AS info ON
info.nodeid = node.nodeid WHERE parentnode = $sectionid AND node.nodeid <> " .
vB::$vbulletin->nodeid . " AND node.nodeid <> " .
$this->getNodeId() . " AND node.contenttypeid <> $section_typeid AND " .
(isset($sectionleads[$sectionid]) ? " (nodeid = " .
$sectionleads[$sectionid] . ") OR " : '' )
. "($permission_clause) ORDER BY publishdate DESC LIMIT " . ($article_count + 1);
$route_info = $section['nodeid'] .
($section['url'] != '' ? '-' . $section['url'] : '');
$section['page_url'] = vB_Route::create('vBCms_Route_Content',
$route_info)->getCurrentURL();
$rst2 = vB::$db->query_read($sql);
$nodes = array();
$first_node = false;
while($node = vB::$db->fetch_array($rst2))
{
//Wir brauchen noch den ersten Knotenpunkt.
if (!$first_node)
{
$first_node = $node['nodeid'];
}
$route_info = $node['nodeid'] .
($node['url'] != '' ? '-' . $node['url'] : '');
$node['page_url'] = vB_Route::create('vBCms_Route_Content',
$route_info)->getCurrentURL();
$nodes[$node['nodeid']] = $node;
}
//Jetzt brauchen wir den ersten Artikel. Wir benutzen jenen, welcher oben in der
// Einstellung festgelegt wurde, sofern diese vorgenommen wurde und gültig ist.
if (isset($sectionleads[$sectionid]) AND isset($nodes[$sectionleads[$sectionid]]))
{
$first_node = $sectionleads[$sectionid];
}
//Falls es keinen Inhalt gibt, machen wir weiter. Das ist ein aktueller Bereich ohne Inhalt.
if ($first_node)
{
$view = new vB_View('cms_userdef_site_summary_bit');
// Überprüfen wir den Inhalt
$lead_item = vBCms_Content::create(
vB_Types::instance()>getContentTypePackage($nodes[$first_node]['contenttypeid']),
vB_Types::instance()>getContentTypeClass($nodes[$first_node]['contenttypeid']),
$first_node);
if (method_exists($lead_item, 'getPreview'))
{
$lead_content = vBCms_Item_Content::create(
vB_Types::instance()>getContentTypePackage($nodes[$first_node]['contenttypeid']),
vB_Types::instance()>getContentTypeClass($nodes[$first_node]['contenttypeid']),
$first_node);
$lead_item->setContentItem($lead_content);
// theoretisch sollte die angehängte Datei entsprechend zugeordnet sein
$view->leadcontent = $lead_item->getPreview();
}
unset($nodes[$first_node]);
$view->nodes = $nodes;
$view->section = $section;
$rendered = $view->render();
$counter++;
$results[$counter] = $rendered;
}
if ($counter >= $section_count)
{
break;
}
}
$view = new vB_View('cms_userdef_site_summary');
$view->results = $results;
$view->bitcount = $counter;
$output = $view->render();
Template cms_userdef_site_summary_bit
<h1 class="header">
<span><a href="{vb:raw section.page_url}">{vb:raw section.title}</a></span>
</h1>
{vb:raw leadcontent}
<ul style="list-style-type:round">
<vb:each from="nodes" key="nodeid" value="node">
<li><a href="{vb:raw node.page_url}" alt="{vb:var node.title}">{vb:raw
node.title}</strong></a></li>
</vb:each>
</ul>
Template cms_userdef_site_summary
<div class="fullwidth">
<div style="width:50%;float:left;">
{vb:raw results.1}
</div>
<div style="width:50%;float:right;">
{vb:raw results.2}
</div>
</div>
<vb:if condition="$bitcount > 2">
<div class="fullwidth">
<div style="width:50%;float:left;">
{vb:raw results.3}
</div>
<div style="width:50%;float:right;">
{vb:raw results.4}
</div>
</div>
</vb:if>
<vb:if condition="$bitcount > 4">
<div class="fullwidth">
<div style="width:50%;float:left;">
{vb:raw results.5}
</div>
<div style="width:50%;float:right;">
{vb:raw results.6}
</div>
</div>
</vb:if>
<vb:if condition="$bitcount > 6">
<div class="fullwidth">
<div style="width:50%;float:left;">
{vb:raw results.7}
</div>
<div style="width:50%;float:right;">
{vb:raw results.8}
</div>
</div>
</vb:if>
<vb:if condition="$bitcount > 8">
<div class="fullwidth">
<div style="width:50%;float:left;">
{vb:raw results.9}
</div>
<div style="width:50%;float:right;>
{vb:raw results.10}
</div>
</div>
</vb:if>
<vb:if condition="$bitcount > 10">
<div class="fullwidth">
<div style="width:50%;float:left;">
{vb:raw results.11}
</div>
<div style="width:50%;float:right;">
{vb:raw results.12}
</div>
</div>
</vb:if>
Herunterladen