// lastpostings 0.6.1 // Hubzilla-Umgebung laden require_once '/var/www/my_webapp/www/boot.php'; // Anzahl der anzuzeigenden Postings define('NUMOFPOSTS', 5); // Postings oder Karten oder Artikel define('ITEMTYPE', 0); // 0 = Posting, 6 = Karte, 7 = Artikel // länge des angezeigten Auszugs define('EXCERPT', 512); // Kanal-ID und Kanalname – nur als Fallback, eigentlich nicht nötig define('MYUID', 51); define('CHANNAME', 'pepechan'); // Kanal-ID und -name ermitteln $channel_id = isset($_SESSION['uid']) ? intval($_SESSION['uid']) : 51; $channel_name = isset($a->channel['channel_name']) ? $a->channel['channel_name'] : 'pepechan'; // SQL-Abfrage: Nur eigene, sichtbare, öffentliche Postings // allen anderen Kram rigoros aussortieren… vor allem die gelöschten Items $sql = sprintf( "SELECT id, mid, llink, title, body, created FROM item WHERE uid = %d AND item_origin = 1 AND item_deleted = 0 AND item_unpublished = 0 AND item_hidden = 0 AND item_pending_remove = 0 AND item_private = 0 AND verb = 'Create' AND obj_type = 'Note' AND item_type = %d AND mimetype = 'text/bbcode' ORDER BY id DESC LIMIT %d", intval($channel_id), ITEMTYPE, NUMOFPOSTS ); $result = q($sql); // Ergebnisse verarbeiten für MySQL UND PostgreSQL $items = []; if (is_array($result)) { $items = $result; } elseif ($result && property_exists($result, 'num_rows') && $result->num_rows > 0) { while ($item = $result->fetch()) { $items[] = $item; } } // Ausgabe if (!empty($items)) { echo '
'; foreach ($items as $item) { $title = htmlspecialchars($item['title'] ?? '', ENT_QUOTES, 'UTF-8'); // BBCode in HTML umwandeln $body = bbcode($item['body'] ?? ''); // Excerpt nach sichtbarem Text kürzen: // HTML-Tags (inkl. Attributwerte wie Bildpfade) zählen nicht ins Zeichenbudget. if (mb_strlen(strip_tags($body), 'UTF-8') > EXCERPT) { $summary = ''; $visible = 0; // Anzahl gezählter sichtbarer Zeichen $len = mb_strlen($body, 'UTF-8'); $i = 0; while ($i < $len) { $char = mb_substr($body, $i, 1, 'UTF-8'); if ($char === '<') { // Kompletten Tag übernehmen (zählt nicht ins Budget) $tagEnd = mb_strpos($body, '>', $i, 'UTF-8'); if ($tagEnd === false) { // kein schließendes '>' mehr → Tag nicht übernehmen, fertig break; } $summary .= mb_substr($body, $i, $tagEnd - $i + 1, 'UTF-8'); $i = $tagEnd + 1; } else { // Sichtbares Textzeichen: zählt ins Budget $summary .= $char; $visible++; $i++; if ($visible >= EXCERPT) { break; } } } $summary .= '…'; } else { $summary = $body; } // Datum ins deutsche Format (TT.MM.JJJJ) $created = date('d.m.Y', strtotime($item['created'])); // Weiterlesen-Link über llink (display erscheint mir "krisensicherer") $llink = $item['llink'] ?? ''; $read_more_link = $llink ? '..::Weiterlesen::..' : ''; echo '
'; if ($title) { echo '
' . $title . '
'; } echo '
' . $created . '
'; echo '
' . $summary . '
'; echo $read_more_link; echo '
'; } echo '
'; } else { echo '

Keine eigenen Beiträge gefunden.

'; }