Skip to content

Letzten aktiven Threads

Um im Simple Machines Forum (kurz SMF) die letzten aktiven Threads im oberen Bereich des Forums zu sehen, kann man sich der SSI Funktion des Boards bedienen! SSI bedeutet Server Side Include und ist eine Möglichkeit Inhalte des Forums in eine Webseite zu integrieren. Weiterhin bietet es die Möglichkeit Forum Statistiken, News, neueste Beiträge, usw. auf eine Homepage einzubinden.

Editieren von [Pfad zum Forum]/Themes/[Mein gewähltes Theme]/BoardIndex.template.php.

Suche nach folgenden Zeilen:

function template_main()
{
        global $context, $settings, $options, $txt, $scripturl, $modSettings;
 

und füge anschließend folgendes ein:

require("[Pfad zum Forum]/SSI.php");

// Letzten aktiven Threads - insert start
echo '
<br />
<div class="tborder"><table border="0" width="100%" cellspacing="1" cellpadding="4">
        <tr class="catbg">
                <td align="center" colspan="2">Letzte aktive Threads...</td>
        </tr>
        <tr>
                <td class="smalltext" colspan="2" align="center">'
, ssi_recentTopics(), '</td>
        </tr>
        </table>
</div>'
;
// Letzten aktiven Threads - insert end
 

Typisch Frau

Da sich mein Auto am heutigen Tag in der Werkstatt (Grund - Reifenwechsel) befindet, durfte ich seit längerem mal wieder mit der S-Bahn zur Arbeit fahren! :-|
Wer schon einmal mit der S-Bahn durch einen Tunnel gefahren ist, weiß das man sich dann in den Fenstern spiegeln kann. Heute ist mir aufgefallen, das insbesondere Frauen dieses Feature sehr intensiv nutzen! Kurz bevor die Bahn hält, wird dann noch mal schnell links und rechts geschaut, ob Makeup und Frisur auch richtig sitzen. Menschen gibt es. :-P

Verwendung eigener Smilies

Um bei Serendipity eigene bzw. zusätzliche Smilies zu verwenden, muss im Theme Ordner (Pfad zum Blog >> templates >> mein verwendetes Theme) eine Datei namens emoticons.inc.php angelegt werden:

<?php
$serendipity['custom_emoticons'] = array(
":'(" => serendipity_getTemplateFile('emoticons/cry.png'),
':-)' => serendipity_getTemplateFile('emoticons/smile.png'),
':|' => serendipity_getTemplateFile('emoticons/normal.png'),
':-O' => serendipity_getTemplateFile('emoticons/eek.png'),
':-(' => serendipity_getTemplateFile('emoticons/sad.png'),
'8-)' => serendipity_getTemplateFile('emoticons/cool.png'),
':-D' => serendipity_getTemplateFile('emoticons/laugh.png'),
':-P' => serendipity_getTemplateFile('emoticons/tongue.png'),
';-)' => serendipity_getTemplateFile('emoticons/wink.png'),
':O' => serendipity_getTemplateFile('emoticons/tired.png'),
':-#' => serendipity_getTemplateFile('emoticons/silence.png'),
...
(genug Platz für weitere Smilies)
...
); ?>
 

Dabei ist zu beachten, das diese Datei im Template Ordner, die Emoticon Einstellung vom Plugin (plugins/serendipity_event_emoticate/serendipity_event_emoticate.php) überschreibt!

Die Pfadangaben sind vom Template ausgehend. In meinem Fall, habe ich im Template Ordner ein weiteren Ordner "emoticons" angelegt und dort alle Smilies hineinkopiert!

Image Download Link (Version 1.4.x)

Im Coppermine Root Directory eine Datei namens download_images.php anlegen und folgenden Code hineinkopieren:

<?php
     if ($_REQUEST ['getfile']){
        $file = $_REQUEST ['getfile'];
     
     }
$save_as_name = basename($file);  
ini_set('session.cache_limiter', '');
header('Expires: Thu, 19 Nov 1981 08:52:00 GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
header("Content-Type: application/octet-stream");
header("Content-Disposition: disposition-type=attachment; filename=\"$save_as_name\"");
readfile($file);
?>
 


Anschließend muss das theme.php (Pfad zu Deiner Gallery >> themes >> Dein gewähltes Theme) noch wie folgt bearbeitet werden!

Suche nach folgenden Code:

if ($mime_content['content']=='image') {
        if (isset($image_size['reduced'])) {
            $winsizeX = $CURRENT_PIC_DATA['pwidth']+5;  //the +'s are the mysterious FF and IE paddings
            $winsizeY = $CURRENT_PIC_DATA['pheight']+3; //the +'s are the mysterious FF and IE paddings
            $pic_html = "<a href=\"javascript:;\" onclick=\"MM_openBrWindow('displayimage.php?pid=$pid&amp;fullsize=1','" . uniqid(rand()) . "','scrollbars=yes,toolbar=yes,status=yes,resizable=yes,width=$winsizeX,height=$winsizeY')\">";
            $pic_title = $lang_display_image_php['view_fs'] . "\n==============\n" . $pic_title;
            $pic_html .= "<img src=\"" . $picture_url . "\" class=\"image\" border=\"0\" alt=\"{$lang_display_image_php['view_fs']}\" /><br />";
            $pic_html .= "</a>\n";
 


Und ersetze ihn mit diesen:

        if ($mime_content['content']=='image') {
            if (isset($image_size['reduced'])) {
                $filesize = $CURRENT_PIC_DATA['filesize'];
                $filesizecorr = intval($filesize/1024);
                $winsizeX = $CURRENT_PIC_DATA['pwidth'] + 16;
                $winsizeY = $CURRENT_PIC_DATA['pheight'] + 16;
                $pic_html = "<a href=\"javascript:;\" onclick=\"MM_openBrWindow('displayimage.php?pid=$pid&amp;fullsize=1','" . uniqid(rand()) . "','scrollbars=yes,toolbar=yes,status=yes,resizable=yes,width=$winsizeX,height=$winsizeY')\">";
                $picturefs_url = str_replace("normal_", "", $picture_url);
                $pic_title = $lang_display_image_php['view_fs'] . "\n==============\n" . $pic_title;
                $pic_html .= "<center><img src=\"" . $picture_url . "\" class=\"image\" border=\"0\" alt=\"{$lang_display_image_php['view_fs']}\" /></center><br />";
                $pic_html .= "<center><a href=\"download_images.php?getfile=$picturefs_url\">Hier klicken, um das Bild zu downloaden!<br /> ($filesizecorr KB) <br /></a><br /></center>";
               $pic_html .= "</a>\n";
 

A never ending story...

Nach der gestrigen Hau-Ruck Aktion ging es heute auf Fehlersuche! Aufgrund der Vielzahl von OpenSource Produkten, die an der Mailkommunikation beteiligt sind, war dies gar nicht so einfach! :-(

Um es kurz zu machen, die maildrop Version war plötzlich aktueller als gewollt! Eigentlich eine prima Sache. Dumm war nur, das die neue Version keine MySQL Unterstützung hatte und somit auch kein Connect zur Benutzerdatenbank möglich war! :-O

Rolle Rückwärts

Wie mir gerade gemeldet wurde, gibt es einige Probleme mit dem neuen Server. Ein kurzer Blick in das Logfile des Servers ergab dann folgendes Bild:
Mar 28 21:20:43 mailtest postfix/pipe[1235]: 8BE0B70537: to=, relay=maildrop, delay=0, status=bounced (user unknown. Command output: Invalid user specified. )

Lange Rede, kurzer Sinn - ich habe die Domain in einer Nacht und Nebel Aktion wieder zurückgebogen!

Fortsetzung folgt! :-P

Neuer Mailserver

Da es momentan noch keine Dokumentation für den neuen Mailserver gibt, werde ich vorab mal ein paar Eckdaten liefern:

  • Spamschutz (Stärke 4, Verschieben in Ordner Spam, Betreff wird markiert)- die Definition erfolgt Global, soll heißen das die Einstellungen für die komplette Domain gelten.

  • White- und Blacklists werden momentan nur vom Administrator gepflegt

  • Virenschutz ist standardmäßig aktiviert. Bei Virenbefall wird der Virus vom Server entfernt und der eigentlich Empfänger bekommt eine Hinweismail!

  • Greylisting ist momentan noch deaktiviert. Greylisting ist ein wirkungsvolles Mittel im Kampf gegen Spam. Dieses Verfahren ermöglicht es, Spam bereits beim Eingang auf dem Mailserver zu erkennen, ohne dass aufwendige Spam-Filter erforderlich sind. Weitere Informationen gibt es unter www.greylisting.org!

  • Horde Webinterface wird in den kommenden Tagen noch an das CI der Firma angepasst!

Anpassung der Kommentare

Um eine bessere Unterscheidung der Kommentare zu erhalten, kann man sich eines kleinen Tricks bedienen! Im Kubrik Theme ist diese Feature nämlich bereits implementiert. Daher sollte man sich besagtes Theme herunterladen und die darin enthaltene comments.tpl ins sein Theme Verzeichnis (falls dort bereits eine existiert - Backup anlegen!) kopieren:

{foreach from=$comments item=comment name="comments"}
    <a id="c{$comment.id}"></a>
    <li class="{if $smarty.foreach.comments.iteration is odd}graybox{/if}" style="margin-left: {$comment.depth*20}px">
        <cite>{if $comment.url}
                <a href="{$comment.url}" target="blank">{$comment.author|@default:$CONST.ANONYMOUS}</a>
            {else}
                {$comment.author|@default:$CONST.ANONYMOUS}
            {/if}</cite> {$CONST.SAYS}:<br />
        <div class="commentmetadata" id="serendipity_comment
{$comment.id}">
            <a href="#c{$comment.id}" title="{$CONST.LINK_TO_COMMENT|sprintf:$comment.trace}">#{$comment.trace}</a>
            {$comment.timestamp|@formatTime:$CONST.DATE_FORMAT_SHORT}
            {if $entry.is_entry_owner}
                (<a href="{$comment.link_delete}" onclick="return confirm('{$CONST.COMMENT_DELETE_CONFIRM|@sprintf:$comment.id:$comment.author}');">
            {$CONST.DELETE}</a>)
            {/if}
            {if $entry.allow_comments}
                (<a href="#serendipity_CommentForm" id="serendipity_reply_{$comment.id}" onclick="document.getElementById('serendipity_replyTo').value='{$comment.id}'; {$comment_onchange}">{$CONST.REPLY}</a>)
                <div id="serendipity_replyform_{$comment.id}"></div>
            {/if}
        </div>
        <p>{$comment.body}</p>
    </li>
{foreachelse}
    <p class="nocomments">{$CONST.NO_COMMENTS}</p>
{/foreach}
 

Nun muss noch das eigene CSS erweitert werden, denn in der neuen comments.tpl wird ein Klasse namens graybox verwendet. Diese kann nun beliebig angepasst werden:

.graybox {
        background-color: #f8f8f8;
        border-top: 1px solid #ddd;
        border-bottom: 1px solid #ddd;
        }
 

Bannerrotation bei Serendipity

Zunächst einmal muss Smarty gesagt werden, das PHP Code implementiert werden darf. Diese Variante ist zwar etwas "dreckig", aber für Leute, die sich nicht näher mit Smarty beschäftigen wollen, doch sehr wirksam! ;-)

Pfad zu Deinem Blog/templates/Dein gewähltes Template/config.inc.php folgenden Eintrag hinzufügen:

<?php
$serendipity['smarty']->security = false;
?>
 

Danach muss die index.tpl bearbeiten werden. Anstellen des alten div id=header folgende Zeile aufnehmen:

<div id="header" onclick="location.href='{$serendipityBaseURL}';" style="background-image:url({php}include "image.php";{/php}); width:750px; height:250px; background-repeat:no-repeat; cursor: pointer;">
 

Beim image.php Skript handelt es sich um ein Random Skript, was aus einen angegebenen Ordner zufällig Bilder auswählt.

<?php
$dir=opendir("<Pfad zu Deinem Blog>");
//This is the directory route to the folder
$directory="http://www.domain.de/imageordner/";
//This is a relative link to the directory if it is not in the same directory as the file you are displaying the images on

$pattern="\.(gif|jpg|jpeg|png|bmp|swf)$";
if(!$dir)
{
die("Failed to read directory");
}
$s=readdir($dir);
$count="0";
$image;
while($s)
{
if(ereg($pattern, $s))
{
$image[$count]=$s;
$count++;
}
$s=readdir($dir);
}
closedir($dir);

//Spit it out
$limit=count($image);
$limit--;
$randNum=rand(0,$limit);
//$size=getimagesize("$directory$image[$randNum]");
echo $directory.$image[$randNum];
?>
 

Das image.php Skript sollte im Root Verzeichnis des Blogs hinterlegt werden!

Video Download Link (Version 1.4.x)

Im Coppermine Root Directory eine Datei namens download_video.php anlegen und folgenden Code reinkopieren:

<?php
define('IN_COPPERMINE',true);
define('UPLOAD_PHP',true);
define('DOWNLOAD_PHP',true);
require('include/init.inc.php');
function download()
{
        global $CONFIG, $lang_upload_php, $FORBIDDEN_SET;
        $pid = (int) $_GET['pid'];
        $sql = 'select '.
                'p.filepath,'.
                'p.filesize,'.
                'p.filename,'.
                $CONFIG['TABLE_ALBUMS'].'.visibility, '.
                'p.aid as aid '.
                'from '.$CONFIG['TABLE_PICTURES'].' as p LEFT JOIN '.$CONFIG['TABLE_ALBUMS'].
                ' ON (p.aid = ' . $CONFIG['TABLE_ALBUMS'].'.aid ) '.
                ' where pid='.$pid.' and approved="YES"';
        if (!empty($FORBIDDEN_SET)) {
                $sql .= ' and '.$FORBIDDEN_SET;
        }
        $result = cpg_db_query($sql);
        // No data returned; Display an error page
        if (mysql_num_rows($result)==0) {
                mysql_free_result($result);
                cpg_die(CRITICAL_ERROR,$lang_upload_php['unknown']);
        }
        $file = mysql_fetch_assoc($result);
        mysql_free_result($result);
        // Empty output buffer
        while(ob_get_level()>0) {
                ob_end_clean();
        }
        // Send binary information to the browser
        header("Content-type: application/octet-stream");
        header("Content-disposition: attachment; filename=".$file['filename']);
        header("Content-Length: ".$file['filesize']);
        header("Pragma: no-cache");
        header("Expires: 0");
        readfile($CONFIG['fullpath'].$file['filepath'].$file['filename']);
}
download();
?>
 


Anschließend muss das theme.php (Pfad zu Deiner Gallery >> themes >> Dein gewähltes Theme) noch wie folgt bearbeitet werden!

Suche nach folgenden Code:

$pic_html  = '<object id="'.$player['id'].'" '.$player['classid'].$player['codebase'].$player['mime'].$image_size['whole'].'>';
$pic_html .= "<param name=\"autostart\" value=\"$autostart\" /><param name=\"src\" value=\"". $picture_url . "\" />";
$pic_html .= '<embed '.$image_size['whole'].' src="'. $picture_url . '" autostart="'.$autostart.'"'.$player['mime'].'></embed>';
$pic_html .= "</object><br />\n";
 


Und ersetze ihn mit diesen:

$pic_html  = '<object id="'.$player['id'].'" '.$player['classid'].$player['codebase'].$player['mime'].$image_size['whole'].'>';
$pic_html .= "<param name=\"autostart\" value=\"$autostart\" /><param name=\"src\" value=\"". $picture_url . "\" />";
$pic_html .= '<embed '.$image_size['whole'].' src="'. $picture_url . '" autostart="'.$autostart.'" '.$player['mime'].'></embed>';
$pic_html .= "</object><br />\n";
$pic_html .= "<p><a href=\"download_video.php?pid={$CURRENT_PIC_DATA['pid']}\">Hier klicken, um das Video zu downloaden!</a></p>";
 

Was bisher geschah

In den letzten Tagen und Wochen konnte ich mich nicht so ausführlich, um wetterling.org kümmern! Gründe gab es einige! :-P

Unter anderem habe ich 2 Webseite fertig gestellt. Bei einer der beiden Seite handelt es sich um die neuen Firmenhomepage vom Ingenieurbüro A. Schulze! Diese Seite habe ich von Grund auf neu gestaltet. PHP und CSS haben jetzt Einzug gehalten!

Bei der zweiten Seite handelt es sich um Dianas neue Webseite! Dabei habe ich die Blogsoftware Serendipity verwendet. Allerdings müssen für diese Seite noch einige CSS Anpassungen gemacht werden, aber die Hauptfunktionalität ist bereits gegeben!

Demnächst werde ich mich an eine Überarbeitung von Mirkos Webseite heran tasten, aber das kann dauern! ;-)

Alles gaaanz automatisch...

Folgendes Szenario - Kunde XY besitzt eine Firewall, die sich automatisch die aktuellsten Engine bzw. Pattern Files runterlädt. Sowohl für das Produkt, als auch für zusätzlich Software, wie AntiVirus oder Spam. Ist auch eine prima Sache, so muss sich der Administrator um nichts kümmern! :-P

Aber, was passiert, wenn ein Update Probleme macht? Soll heißen, Mails können weder empfangen, noch versendet werden! Ganz klar, das neuste Update wird automatisch heruntergeladen und gut ist! Weit gefehlt!

Der Kunde muss sich von einem Server das File herunterladen und manuell installieren! Automatisch den Bug bezogen und Manuell entfernt! Alles, wie früher! ;-)