Aufgabe Nr. 15: Bilder einbinden

- Veröffentlicht unter Software - Web von

Damit mein Blog nicht zur Textwüste verkommt, möchte ich hin und wieder Beiträge mit ein paar Screenshots, die ich gern mit FastStone Capture, Greenshot oder Shotty erstelle, garnieren. In der Regel notiere ich Bilder in einem neuen Absatz (<p> in HTML). Da es dann gerade bei kleinen Bildern hässlich aussieht, wenn sie zentriert oder "links angeklatscht" angezeigt werden, platziere ich dafür in der Datei /style.css über der Regel div.post-content pre Folgendes:

div.post-content img {
  border: .1em solid #ccc;
  margin: .4em 1em;
  padding: .5em;
}

Damit erhalte ich einen dünnen grauen Rahmen, der einen gewissen Abstand zum eigentlichen Bild hat und zusätzlich einen nicht zu großen Leerraum außen um den Rahmen herum: Office 2013 und die administrativen Vorlagendateien (ADM/ADMX)

Bilddateien, die eine höhere Auflösung als 480x360 Pixel aufweisen, verkleinere ich mittels IrfanViews Funktion "Batch-Konvertierung" bei einer gleichzeitigen Schärfung mit dem Wert 10 entsprechend und speichere sie mit Kompressionsstufe 9 im PNG-Format ab. Anschließend lade ich sie per FTP zu meinem Webhoster in einen Ordner /uploads/JJJJ/MM/ hoch.

Praktischer Link: Silent installation/uninstallation of OfficeScan clients via AutoPCC

- Veröffentlicht unter Software - Windows von

Silent installation/uninstallation of OfficeScan clients via AutoPCC

Es scheint allerdings keine gute Idee zu sein, beide Vorschläge gleichzeitig umsetzen zu wollen. Als ich den Wert für Uninstall von 0 auf 1 umgestellt hatte, konnte ich OfficeScan 10.6 nicht mehr installieren und in der Datei %TEMP%\OFCNTINST.log stand:

[InstallResult]
StartTime=2013/08/15 13:36:59
Status=0
Error=-13
FinishTime=2013/08/15 13:37:00

Ich tippe mal darauf, dass durch den Wert 1 nur eine Deinstallation angestoßen wurde und -13, analog zum Artikel What ActiveUpdate error codes appear in OfficeScan?, bedeuten könnte: insufficient product information.

Wie Trend Micro das offenbar wirklich meint (neuer Ordner/neue Freigabe mit angepasster Kopie von AutoPcc), steht in Automatically installing/uninstalling OfficeScan or Worry-Free Business Security (WFBS) using a login script.

Aufgabe Nr. 14: <pre> "steht über"

- Veröffentlicht unter Software - Web von

Bei überlangen Zeilen innerhalb des <pre>-Tags ragen diese derzeit über den rechten Rand der Blog-Einträge hinaus:

Could not execute query

Nicht gerade schön, oder? Die Lösung ist einfach: Man muss lediglich innerhalb der Datei /style.css für den Selektor div.post-content pre eine neue Deklaration overflow: auto; einfügen. Mit dem Wert auto zeigen Desktop-Browser, wie z. B. Firefox oder Internet Explorer, Scrollbalken für den <pre>-Abschnitt an, falls diese wegen überlanger Zeilen notwendig sein sollten.

Aufgabe Nr. 13: Stylesheet-Angaben auslagern

- Veröffentlicht unter Software - Web von

Update 2017-02-12: URL der Google CSS Style Rules aktualisiert.


Bevor ich weitere kleine Anpassungen am Aussehen des Blogs vornehme, möchte die vorhandenen Angaben in eine separate Datei auslagern. Ich schneide daher aus der Datei /index.php alle Zeilen von <style type="text/css"> bis </style> aus und speichere sie in die Datei /style.css.

Bei dieser Gelegenheit lasse ich der neuen Datei auch die meisten von Googles CSS Style Rules angedeihen und komme zu folgendem Ergebnis:

*,
html {
  margin: 0;
  padding: 0;
}

body {
  background-color: #ddd;
  color: #333;
  font-family: 'Lucida Sans Unicode', 'Lucida Grande', verdana, sans-serif;
  font-size: .9em;
  margin: 0 auto;
  padding: 0;
}

a {
  color: #069;
}

h2 {
  color: #666;
  font-size: 1.4em;
  font-weight: normal;
}

p {
  line-height: 1.6em;
  margin-bottom: 10px;
}

div.wrapper {
  margin: 50px auto 10px;
  padding: 5px;
  width: 80%;
}

div.post {
  background-color: #fff;
  border: 1px solid #ccc;
  margin: 10px 0;
  padding: 7px;
}

span.date {
  color: #666;
  font-size: .7em;
  text-transform: uppercase;
}

div.navigation p a {
  font-size: 1.2em;
}

div.navigation p.previous-link {
  float: left;
  text-align: left;
  width: 48%;
}

div.navigation p.next-link {
  float: right;
  text-align: right;
  width: 48%;
}

div.post-content {
  padding-top: 4px;
}

div.post-content ol,
div.post-content ul {
  line-height: 1.6em;
  margin: 1em 0 .6em;
  padding: 0 0 0 2em;
}

div.post-content li {
  margin-bottom: .4em;
}

div.post-content pre {
  margin: 1em 0;
  overflow: auto;
}

div.clear { 
  clear: both;
}

div.footer p {
  color: #999;
  font-size: .9em;
  padding-top: 10px;
  text-align: center;
}

div.footer p a {
  color: #999;
}

Zum Schluss füge ich der Datei /index.php eine Zeile <link rel="stylesheet" type="text/css" href="style.css" /> direkt über </head> hinzu, um die Stylesheet-Angaben dem Browser bekannt zu machen.

Aufgabe Nr. 12: Noch ein wenig mehr Deutsch bitte

- Veröffentlicht unter Software - Web von

An drei Stellen benutzt das miniblog-Front-End die englische Sprache.
Ich ändere daher in der Datei index.php von &laquo; return to posts nach &laquo; zurück zur Übersicht und in der Datei includes/miniblog.php von &laquo; Older posts nach &laquo; Ältere Beiträge sowie Recent posts &raquo; nach Neuere Beiträge &raquo;.

Aufgabe Nr. 11: Blog-Name soll Link zum Blog sein

- Veröffentlicht unter Software - Web von

Update 2013-12-26: blog.bttr-software.de in www.robertriebisch.de geändert.


Ich möchte erreichen, dass der Blog-Name "Notepad" ein klickbarer Link nach http://www.robertriebisch.de/ ist.
Mit der Konfigurationsoption "miniblog-baseurl", die ich in Aufgabe Nr. 10: Einen RSS-Feed anbieten eingeführt habe, ist das nun ein Kinderspiel.

In der Datei index.php ändern von <h1><?=$config['miniblog-title']?></h1> nach <h1><a href="<?=$config['miniblog-baseurl']?>"><?=$config['miniblog-title']?></a></h1> und fertig ist der Lack!

Aufgabe Nr. 10: Einen RSS-Feed anbieten

- Veröffentlicht unter Software - Web von

Update 2013-12-26: blog.bttr-software.de in www.robertriebisch.de geändert.


Bereits am 23. Juli hatte ich angefangen, mich mit diesem Thema zu beschäftigen. Noch einiger Recherche zu den Grundlagen und viel "Probiererei" in den letzten Tagen kann ich nun endlich ein Ergebnis präsentieren.

Dem KISS-Prinzip folgend, habe ich auf jeglichen Firlefanz verzichtet und den Quellcode sehr einfach aufgebaut.

Zunächst muss die Datenbanktabelle miniblog_config mittels phpMyAdmin um eine neue Zeile "miniblog-baseurl", "http://www.robertriebisch.de/", "Base URL to your blog, e.g., http://blog.yourdomain.tld/" ergänzt werden.
Da es sich um eine recht wichtige Einstellung handelt, möchte ich sie an dritter Stelle angezeigt bekommen. Ich korrigiere daher wieder die Reihenfolge mit dem SQL-Befehl ALTER TABLE miniblog_config ORDER BY FIELD(config_name, 'miniblog-title', 'miniblog-description', 'miniblog-baseurl', 'posts-per-page', 'date-format', 'password', 'miniblog-filename', 'use-modrewrite').

Im Wurzelverzeichnis erstelle ich eine neue Datei feed.php mit folgendem Inhalt:

<?php
define('IN_BLOG', TRUE);
define('PATH', '');
include('includes/config.php');
include('includes/functions.php');

$link = mb_connect($sqlconfig);
unset($sqlconfig);

if (!$link) {
die("Could not connect to MySQL database, check the settings in config.php");
}

$config = mb_config();

$baseurl = rtrim($config['miniblog-baseurl'], '/') . '/';

$output = "<?xml version="1.0" encoding="iso-8859-1"?>n";
$output .= "<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">n";
$output .= " <channel>n";
$output .= ' <description>' . $config['miniblog-description'] . "</description>n";
$output .= ' <link>' . $baseurl . "</link>n";
$output .= ' <title>' . $config['miniblog-title'] . "</title>n";

if ((int)$config['use-modrewrite'] === 0) {
$baseurl .= $config['miniblog-filename'] . '?post=';
}

$result = mysql_query('SELECT * FROM `miniblog` WHERE `published` = 1 ORDER BY `date` DESC LIMIT 20') or die ("Could not execute query");

while ($row = mysql_fetch_array($result)) {
extract($row);

$output .= " <item>n";
$output .= ' <title>' . htmlspecialchars(stripslashes($post_title)) . "</title>n";
$output .= ' <link>' . $baseurl . $post_slug . "</link>n";
$output .= ' <pubDate>' . gmdate("r", $date) . "</pubDate>n";
$output .= ' <content:encoded><![CDATA[' . stripslashes($post_content) . "]]></content:encoded>n";
$output .= " </item>n";
}

$output .= " </channel>n";
$output .= "</rss>n";

header("Content-Type: text/xml; charset=iso-8859-1");
echo $output;
?>

Damit kann der Feed über http://www.robertriebisch.de/feed.php bereits angezeigt werden. Was jetzt noch fehlt, ist, dass der Webbrowser beim Aufrufen der Seite http://www.robertriebisch.de/ dem Besucher über das Feed-Symbol optisch signalisiert, dass ein Feed angeboten wird.

Dazu füge ich in der Datei index.php unter der Zeile <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> eine neue Zeile <link rel="alternate" type="application/rss+xml" title="<?=$config['miniblog-title']?>" href="feed.php" /> ein.

Das war's bereits!

Ich möchte allerdings darauf hinweisen, dass ihr den hier vorgestellten Quellcode auf eigene Gefahr benutzt. Verbesserungsvorschläge sind mir jederzeit herzlich willkommen.

Abschließend möchte ich noch ein paar Links zu Webseiten auflisten, die mir bei dieser Aufgabenstellung von großem Nutzen waren:

  1. RSS
  2. Create an RSS feed with PHP
  3. PHP and RSS: Getting it together
  4. Tutorial: RSS Feed erstellen
  5. Why RSS Content Module is Popular - Including HTML Contents - RSS
  6. RSS Best Practices Profile
  7. Feed Validator for Atom and RSS
Seite 10 von 11