Miniblog 0.5
+For CMSimple_XH 1.6.2 or higher
+ +Miniblog can use normal CMSimple_XH pages and also single files as blog posts. Both methods can be mixed. Multiple blogs per site are possible. +Posts of page based blogs have to be created by the webmaster, posts of single file blogs can also be created by other users after log-in via Register_XH or Memberpages.
+With blog features turned off, Miniblog can also be used as table of contents for sub-pages.
+ +Plugin call
+Usually you would need only to call {{{miniblog}}}
.
+The following options are only needed for running more multiple different Miniblogs on a site.
{{{miniblog ['different_startpage', 'sorting', 'category'_buttons', 'archive_link',
+ 'limit_posts', 'columns', 'show_categories', 'show_date', 'show_keyword'] }}}
Arguments in [] optional. Arguments are needed only to create different types of blogs on the same site. Normally setting will be done via plugin config.
+-
+
- different_startpage: usually empty, however if page based posts aren't subpages of the blog page but of another page, enter that page name here. +
- sorting: 'alphabet', 'newest', 'title', 'keyword', 'category' or 0 for no sorting +
- category_buttons; enter 0 for off, or enter 1 for on, or enter
''
to follow config setting
+ - archive_link; as above, enter 0 or 1 for on or off, or
''
to follows config setting
+ - limit_posts; This setting limits the number of posts displayed on the blog page. If there are more posts, additional blog pages are generated. Enter a number, or enter 0 for off, or enter
''
to follow config setting.
+ - columns; as above, 0 or 1 for on or off, or
''
to follow config setting
+ - show_categories; as above, 0 or 1 for on or off, or
''
to follow config setting
+ - show_date; as above, 0 0 or 1 for on or off,
''
follows config setting
+ - show_keyword; mostly used for author's name, 0 or 1 for on or off,
''
to follow config setting
+
Example:
+{{{miniblog '','alphabet',0,0,'',1,0,0}}}
alphabetical sorting, no category buttons, no archive link, number of posts on the blog page as in config, 2 columns, categories and dates not shown.
+
New in 0.5
+-
+
- Single file based posts +
- Comments +
- Multiple blogs. +
- Multiple categories. +
- Archive on extra page. +
- Posts with URL like 3rd level pages, URL doesn't change when post gets moved to the archive. +
- Searchable via standard CMSimple search. +
- Internal links to single file posts in admin mode selectable just like normal CMSimple pages. +
- External users can write blog posts after log-in. +
- Teaser in 2 columns. +
- The number of teasers on the blog page can be limited. The blog page will be divided into multiple subpages each with the stated limit of teasers. +
- Teasers can be sorted newest first, oldest first, title, keyword (=author's name), category and no sorting. +
- Positioning of teaser images can be set in config. +
- The image browser for teaser images in admin mode. +
- Backlinks also at the end of a blog post. +
- Page based post don't have to be subpages of blog page +
Updating: Unzip package. This contains additional code for the filebrowser, therefore install package as it is in the base folder. Then go to Miniblog plugin backend. This triggers the reading of the old
+ config and generation of a new one.
From Miniblog version 0.4 there may remain 2 files:
+css/0.4_default.css
and
+css/0-4_default.css
.
+They are not used and should be deleted.
Blog from single files
+ +Plugin call for blog page: {{{miniblog}}}
+ Plugin call for writing blogs by logged-in users: {{{miniblogwriter}}}
Single html files are created either by logged-in users with Christoph Becker's Extedit_XH or by the admin in the plugin backend. Next to these html files there is a small json database where category, publishing date, keyword, title, teaser, teaser image link are stored. From this databank the blog page is generated.
+ +Images can be added to the teasers of the blog page to make the teasers more attractive. +To enable external logged-in authors to use teaser images, you need to specify in the config a subfolder of the standard images folder, as folder for teaser images. External authors can select images only from that folder. If you write posts as admin however, you have the standard image browser of CMSimple_XH at your disposal (works in Tinymce and CKeditor, but not yet in Tinymce4) and you are not restricted to one folder. Moreover, you can also choose the position of the image. If you have set the blog page in 2 columns, it is possible to select that a teaser to an important post should span +over both columns, which can serve as an eye catcher, especially if +used together with a rather wide image that reaches over both columns.
+ +Each post gets an URL similar to a 3rd level CMSimple page:
+www.basedomain.xx/?blogname/foldername/postname
.
+
The blogname can be any name except existing page names of the 1st level.
+Different users get different folders for saving their
+posts. When a user logs in for the first time,
+he will be asked to choose a name for his folder. This name will be
+mapped as folder belonging to the user. This mapping can be edited by the admin in the backend.
+All posts of the user will have the user's full name as stored in Memberpages or Register_XH as keyword.
+Thus the keyword is used as author's name.
Standard CMSimple functions like plugin calls and image placement work as usual, +however Extedit_XH is relatively restricting towards users. +There are no such restrictions for composing post as admin from the backend.
+ +Archive for both types of blogs
+The archive is activated by entering an archiving date. For single file posts the archive mapping has to be updated additionally. It is possible to have a special archive page for single file posts. Create the page, write {{{miniblog}}}
into the content and enter the page name into the language file. The "archive" button on the blog page will now function as link to the archive page. Archived posts will get a backlink to the archive. Older page based posts however will not be included in that archive and will simply continue to be displayed as normal posts on the blog post page.
If one of the 2 blog functions (single files/CMSimple pages) is not used, this function can be switched off in the backend.
+ + +Blog from CMSimple pages
+ +Only when your blog posts are not subpages of the blog page but subpages of another page, that other page name must be entered as 1st argument in the plugin call. If you want backlinks, that page name has to be entered also in the language file at page-posts backlinks from
.
Date:
Use Pagedata > Page > Publication Period (1st field).
+If a Publication date has been entered in the page data,
+this date will serve as blog publication date, otherwise the date of the last edit will be taken.
+If the publication date has not yet been reached, the page will not be listed.
+If automatic archiving is set and the date is older than the archiving date,
+the page will be listed in the blog archive.
+Note: If a date for "expires" has been entered into the page data of a page
+and this date is past, the page cannot be reached by link any more and will not be listed by miniblog,
+not even in the archive.
Keyword:
+
Use Pagedata > Meta-Tags > Keywords
The Keyword is taken form the page data meta tag Keywords
.
+If that is empty, the keyword (i.e. blog author's name) will be taken
+from the first h4, h5, or h6 headline, or first bold or italic text or will be left
+empty as specified in the plugin config.
Teaser Text:
Use Pagedata > Meta-Tags > Description
The teaser is taken from the pagedata meta tag Description
.
+Is that empty, the teaser text will be taken, depending on the config setting,
+either from the beginning of the text after the headline or from the beginning
+of the first <p>
paragraph, with teaser character length being set in plugin config..
Categories:
++Post on 3rd level pages +
|
Blog Table of Contents
|
|__Category 1
| |
| |__Blog1
| |
| |__Blog2
| |
| |__Blog3
|
|__Category 2
|
|__Blog4
in the beginning of a page name
|
Blog Table of Contents
|
|__Cat_Category 1
|
|__Blog1
|
|__Blog2
|
|__Blog3
|
|__Cat_Category 2
|
|__Blog4
Miniblog usually gives every post a category. For page based posts, categories are provided by intermediate pages, either on an intermediate level or from pages whose name start with a key phrase. Usually you want to hide these +pages so that they don't appear in the menu. You can as well hide all blog pages, if you don't want them to appear in the page menu.
+Posts without category are also possible. For the Keyphrase type category this are pages that don't have a preceding category page, for the normal 3 level arrangement this ar pages that are on the same level as the category pages and contain text.
+Teaser images: If you place an image in a category page, that image will appear in the teasers of all posts belonging to that category.
diff --git a/help/help_de.htm b/help/help_de.htm new file mode 100644 index 0000000..695cf2d --- /dev/null +++ b/help/help_de.htm @@ -0,0 +1,162 @@ + + + + + +Miniblog 0.5
+Für CMSimple_XH ab Version 1.6.2
+ + +Miniblog erzeugt Blogs mit Beiträgen aus normalen Seiten der content.htm +oder aus einzelnen externen HTML-Dateien oder einer Mischung von beidem.
+ +Beliebig viele Blogs innerhalb einer Website möglich. +Blogbeiträge aus normalen Seiten (=seitenbasierte Beiträge) kann nur der +Webmaster schreiben, einzeldatei-basierte Beträge hingegen können nach Login (via Memberpages/Register_XH) auch von anderen Nutzern verfasst werden.
+Miniblog kann durch seine Fähigkeit, die normale CMSimple-Seitenstruktur zu nutzen, auch als Inhaltsverzeichnis für Unterseiten verwendet werden, wenn man blog-typische Funktionen abschaltet.
+ +Pluginaufruf
+Normalerweise reicht der Aufruf {{{miniblog}}}
.
+
Wenn man jedoch mehrere Miniblogs mit verschiedenen Funktionen innerhalb einer Website nebeneinander betreiben will, kann man
+diese per Pluginaufruf individuell konfigurieren.
{{{miniblog ['Oberseite', 'Sortierung', 'Kategoriebuttons', 'Archivlink',
+ 'Anzahlbegrenzung', 'Spalten', 'Zeige_Kategorie', 'Zeige_Datum', 'Zeige_Keyword'] }}}
Angaben in [] optional.
+-
+
- Oberseite: Normalerweise leer, wenn seitenbasierte Beiträge nicht unter der Blogseite stehen, hier Namen der zugehörenden Oberseite eingeben. +
- Sortierung: 'newest', 'oldest', 'title', 'keyword', 'category' oder 0 für keine Sortierung. Bei Beiträgen externer Nutzer wird automatisch der Autorenname in die Variable 'keyword' geschreiben. +
- Kategoriebuttons: 0 oder 1 für an oder aus, bei
''
gilt Konfigwert
+ - Archivlink: 0 oder 1 für an oder aus, bei
''
gilt Konfigwert
+ - Anzahlbegrenzung: Begrenzt die Anzahl der Teaser auf der Blogseite.
+ Wenn es mehr Teaser gibt, werden Folgeblogseiten erzeugt.
+ Hier eine Zahl für die maximale Teaseranzahl pro Seite eingeben oder eine 0 für ausgeschaltet. Bei
+ Eingabe von
''
gilt der Konfigwert.
+ - Spalten: 0 oder 1 für an oder aus, bei
''
gilt Konfigwert
+ - Zeige_Kategorie: 0 oder 1 für an oder aus, bei
''
gilt Konfigwert
+ - Zeige_Datum: 0 oder 1 für an oder aus, bei
''
gilt Konfigwert
+ - Zeige_Keyword: meist für Autorennamen genutzt, 0 oder 1 für an oder aus, bei
''
gilt Konfigwert
+
Beispiel:
+{{{miniblog '','alphabet',0,0,'',1,0,0}}}
alphabetische Sortierung, keine Kategoriebuttons und kein Archivlink, Höchstanzahl der angezeigten Beiträge wie in Konfig, zweispaltige Ausgabe ohne Kategorien und Datumsanzeige.
+
Neu in 0.5
+-
+
- Einzeldatei-basierte Blogbeiträge. +
- Multiblog-fähig. +
- Kommentarfunktion einschaltbar mit Angabe der Kommentaranzahl pro Beitrag. +
- Multikategorie-fähig. +
- Archiv auf eigener Archiv-Seite möglich. +
- Einzeldatei-Blogs mit URL wie normale Seiten. URL ändert sich nicht, wenn Beitrag ins Archiv kommt. +
- Mit Standard-Suchfunktion durchsuchbar. +
- Links zu Blogbeiträgen im Bearbeitungsmodus auswählbar wie zu normalen CMSimple-Seiten. +
- Externe Nutzer können Blogbeiträge via Memberpages/Register_XH verfassen. +
- Responsive zweispaltige Teaser. +
- Position des Teaserbildes konfigurierbar. +
- Image Browser für Teaserbilder im Admin-Modus. +
- Anzahl der Teaser auf der Blogseite kann begrenzt werden. Die Blogseite wird dann in mehrere Folgeseiten aufgeteilt. +
- Anordnung Neuestes zuerst, Ältestes zuerst, + nach Titel, Keyword (=Autorennamen), Kategorien oder keine besondere Anordnung. +
- Backlinks auch am Ende der Beiträge möglich. +
- Seiten-basierte Beiträge brauchen keine Unterseiten der Blogseite mehr zu sein. +
Updaten: Zip entpacken, das Verzeichnis enthält auch Code für die Nutzung des Filebrowsers aus Miniblogf heraus. Daher das Paket so wie es ist in den Basisordner der Website kopieren. Die alte Miniblog-Version wird dann mit der neuen überschreiben. Nun zum Plugin-Backend wechseln.
+Das Plugin liest dann die alte Konfig aus und generiert eine neue.
+
+Aus Version 0.4 finden sich eventuell noch 2 alte Dateien:
+css/0.4_default.css
und
+css/0-4_default.css
.
+Diese werden nicht mehr genutzt und sollten gelöscht werden.
Blog mit Beiträgen aus Einzeldateien
+ +Hier werden einzelne HTML-Dateien entweder durch eingeloggte Mitglieder mithilfe von Christoph Beckers Plugin Extedit_XH erstellt oder vom Admin im Plugin-Backend. Zu diesen Dateien gibt es jeweils einen Artikelkopf mit Kategorie, Veröffentlichungsdatum, Schlagwort bzw. Autorennamen, Titel, Teaser und Teaserbild, der in einer kleinen Json-Datenbank gespeichert wird. Aus dieser Datenbank wird automatisch die Blogstartseite mit Links zu den einzelnen HTML-Blogbeiträgen generiert.
+ +Auch Bilder können in die Teaser eingefügt werden. +Um eingeloggten externen Autoren diese Bildernutzung zu ermöglichen, muss man einen Ordner dafür in der Konfig angeben. +Die Externen können dann Bilder aus diesem Ordner auswählen. Wenn man als Admin Beiträge +verfasst, hat man den Standard-CMSimple_XH-Bild-Browser zur Verfügung und ist nicht mehr auf einen Ordner begrenzt (funktioniert mit Tinymce und CKeditor, zurzeit jedoch noch nicht mit Tinymce4). +Hat man die Teaser in 2 Spalten angeordnet (Konfigeinstellung), kann man für einzelne Teaser auch einstellen, dass sie über beide Spalten laufen, z.B. um eine Art Blickpunkt in der Teaserliste zu schaffen.
+ + +Die Blogbeiträge haben eine URL wie normale Seiten der 3. Ebene:
+www.Basisdomain.xx/?Blogname/Ordnername/Beitragsname
. Der Blogname ist frei wählbar, er darf nur nicht mit einem bestehenden Namen einer Seite der 1. Ebene übereinstimmen. Die Beiträge selbst sind nach Ordnername und Betragskurzname gekennzeichnet. Verschiedene Ordner werden dabei verschiedenen Mitgliedern zugeordnet. Beim ersten Erstellen eines Beitrags werden Mitglieder aufgefordert sich einen passenden Ordnernamen für ihre Beiträge auszudenken. Dieser Ordner ist dann dauerhaft mit dem Mitglied verbunden. Wenn der Admin Beiträge erstellt, kann er allerdings beliebige Ordnernamen verwenden. Die Zuordnung von Ordnernamen zu Mitgliedern kann im Backend editiert werden. Der volle Name des Autors, so wie dieser bei Memberpages oder Register_XH gespeichert ist, wird automatisch als Keyword des Beitrags gespeichert.
Die üblichen CMSimple-Funktionen wie Plugins und Bilder funktionieren auf den Blogseiten, +werden allerdings durch Extedit_XH für Mitglieder stark beschränkt. +Wenn man die Einzeldateifunktion als Admin nutzt, unterliegt man keinen Beschränkungen. +Die Bedienung ist ansonsten selbsterklärend. Falls eine der beiden Blogfunktionsweisen +(Einzeldatei-besierte Blogbeiträge/seitenbasierte Blog-Beiträge) nicht genutzt wird, kann man diese zur Resourcenschonung im Backend abstellen.
+ +Für beide Blogtypen
+Archiv
Um ein Archiv zu erstellen, ein Datum dafür in der Konfig eingeben. Für die Einzeldateibeiträge muss man anschließend die Archivzuordnung updaten. Danach werden Beiträge, die älter als das gewählte Archivierungsdatum sind, versteckt und erst gezeigt, wenn auf den Button "Archiv" geklickt wird. Bei Einzeldateien kann man das Archiv auch auf einer eigenen Seite zeigen. Dazu eine Seite erstellen, dort {{{miniblog}}} hineinschreiben, und den Seitennamen (z.B. "Archiv") in der Sprachdatei eintragen. Anschließend im Backend wieder die Archivzuordnung aktualisieren. Danach fungiert der Button "Archiv" auf der Blogseite als Link zur Archivseite.
+ +Blogbeiträge aus Seiten werden bei einer eigenen Archivseite allerdings nicht berücksichtigt. Um zu vermeiden, dass sie gar nicht mehr gezeigt werden, werden sie beim Vorhandensein einer eigenen Archivseite – auch wenn sie älter als das Archivierungsdatum sind – weiterhin auf der Blogseite aufgelistet.
+ +Angabe der Kommentaranzahl zu einem Beitrag
+Wenn man ein Kommentarplugin wie Twocents_XH oder Comments_XH bei einzeldateibasierten Beiträgen nutzt, wird die Anzahl der Kommentare auf der Blogseite automatisch angezeigt.
+Bei seitenbasierten Beiträgen muss man das Kommentarplugin extra
+unten auf der Seite installieren, z.B. {{{twocents 'passendkodierterSeitenname'}}}
. Es kommt darauf an, den Seitennamen auf passend kodierte Art einzugeben, denn nur alphanumerische Zeichen, -
und _
werden so wie sie sind akzeptiert. Wenn noch andere Zeichen im Seitennamen vorkommen, müssen diese entsprechend den Einstellungen, die man in CMSimple getätigt hat, verändert werden. Normalerweise wird statt dem Leerzeichen ein Bindestrich genommen und in deutschsprachigen Seiten werden Ö Ä Ü ö ä ü ß zu Oe Ae Ue oe ae ue ss. Andere Zeichen werden URL-encodiert, was allerdings in manchen Browsern in der Anzeige wieder zurückkodiert wird, so dass einem dann die Anzeige in der Adressliste nicht weiter hilft. Hier kann man über einen online URL Decoder/Encoder den passenden Code finden.
Blog mit seitenbasierten Beiträgen
+ +Normalerweise auch hier nur {{{miniblog}}}
aufrufen.
+Liegen aber die Seiten der Blogbeiträge nicht unterhalb der eigentlichen Blogseite, dann muss man die entsprechende Seite Oberseite als 1. Argument im Pluginaufruf eintragen, {{{miniblog ['Oberseite der Blogbeiträge' , etc. ] }}}
. So weiß das Plugin, wo es die Beiträge zu suchen hat. Für Backlinks muss in der Sprachdatei immer die eigentliche Blogseite eingetragen werden. Falls die Beiträge aber unterhalb einer anderen Seite stehen, muss man diese Seite ebenfalls in dem entsprechenden Feld der Sprachdatei eingeben.
Blog-Datum:
Hier nimmt Miniblog das Datum, das es
+in Pagedata > Seite > Veröffentlichungszeitraum (1. Feld) findet
+Wenn das Feld leer ist, wird das Bearbeitungsdatum genommen.
Schlüsselwort(e):
Zuerst schaut Miniblog in Pagedata > Meta > Keywords
Wenn leer, wird Text je nach
+Konfig.-Einstellung aus einer ersten h6, h5, h4 Überschrift oder dem ersten fetten oder kursiven Textstelle
+genommen oder leer gelassen.
Teaser-Text:
Die erste Quelle ist Pagedata > Meta > Description
Wenn leer, wird je
+nach Konfig.-Einstellung Text vom Anfang des ersten
+<p>
-Absatzes oder vom dem was der Überschrift folgt genommen.
Kategorien:
+bei Blogs in Unterunterseiten
+
|
Blog-Inhaltsverzeichnis
|
|__Kategorie 1
| |
| |__Blog1
| |
| |__Blog2
| |
| |__Blog3
|
|__Kategorie 2
|
|__Blog4
+Cat_
am Anfang von Überschriften versteckter Seiten
|
Blog-Inhaltsverzeichnis
|
|__Cat_Kategorie 1
|
|__Blog1
|
|__Blog2
|
|__Blog3
|
|__Cat_Kategorie 2
|
|__Blog4
Kategorien: Miniblog-Blogeinträge haben normalerweise +eine Kategorie, entweder die Ebene über den eigentlichen Blogeinträgen oder Seiten mit Schlüsselwort. +Die Kategorieseiten haben selbst keinen Text. Man versteckt sie am besten, damit sie nicht im Menü erscheinen. +Man kann zusätzlich noch alle Blogseiten verstecken, wenn man nicht möchte, dass sie im Seitenmenü erscheinen.
+Teaser-Bilder: Ein Bild in den Kategorieseiten erscheint in der Blogübersicht am Anfang aller Teaser die zu der jeweiligen Kategorie gehören.
+ +Blogeinträge ohne Kategorie sind auch möglich: Bei Nutzung der Unterseitenmethode sind das Einträge mit Text auf der Kategorie-Ebene. Bei Nutzung der Schlüsselwortmethode +sind es Seiten, über denen keine Seite mit Schlüsselwort steht.
+Datum: Ist das Veröffentlichungsdatum noch nicht erreicht, wird der Blogeintrag nicht gelistet
+Archiv: Ist automatische Archivierung eingestellt und wird das Archivierungsdatum unterschritten, wird der + Blogeintrag nur im Blog-Archiv gelistet
+Ablaufdatum: Ist bei einem Blogeintrag im Pagedata-Veröffentlichungszeitraum ein Ablaufdatum eingetragen, Kann +diese Seite nach Ablauf des Datums nicht mehr per Link erreicht werden und wird dann von Miniblog überhaupt nicht mehr +gelistet.
+ + + + diff --git a/index.php b/index.php new file mode 100644 index 0000000..aa67c93 --- /dev/null +++ b/index.php @@ -0,0 +1,726 @@ + + * last edit 20.08.2016 11:49:04 + */ + +/** + * Prevent direct access. + */ +if (!defined('CMSIMPLE_XH_VERSION')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +define('MINIBLOG_VERSION','0.5.1'); +if ((!isset($plugin_cf['miniblog']['version']) + || $plugin_cf['miniblog']['version'] != MINIBLOG_VERSION)) { + include_once $pth['folder']['plugins'] . 'miniblog/config/defaultconfig.php'; +} + + +if (!(XH_ADM && $edit) + && $plugin_tx['miniblog']['page-posts_backlinks_to'] + && $plugin_cf['miniblog']['posts_from_pages']) +{ + Miniblog_makeBackLink(); +} + +if ($plugin_cf['miniblog']['posts_from_members']) include_once 'writer.php'; + + +/** + * Creates a back link for page based posts + * on all sub- and sub-sub-pages of the blog start page + */ +function Miniblog_makeBackLink() +{ + global $c, $h, $u, $pth, $plugin_cf, $plugin_tx; + $blogpages = array(); + + $bcklinkto = array_search($plugin_tx['miniblog']['page-posts_backlinks_to'], $h); + $bcklinkfrom = $plugin_tx['miniblog']['page-posts_backlinks_from'] + ? array_search($plugin_tx['miniblog']['page-posts_backlinks_from'], $h) + : $bcklinkto; + + if ($bcklinkfrom !== false) { + + foreach (Miniblog_childPages($bcklinkfrom) as $value) { + if (!Miniblog_childPages($value)) { + $blogpages[] = $value; + } else { + foreach (Miniblog_childPages($value) as $subvalue) { + $blogpages[] = $subvalue; + } + } + } + if ($plugin_cf['miniblog']['backlinks_also_below_content']) { + foreach ($blogpages as $k) { + $c[$k] = Miniblog_backLinkButton($u[$bcklinkto]) . $c[$k] + . Miniblog_backLinkButton($u[$bcklinkto], true); + } + } else { + foreach ($blogpages as $k) { + $c[$k] = Miniblog_backLinkButton($u[$bcklinkto]) . $c[$k]; + } + } + } +} + +/** + * Creates a Backlink for single file posts + */ +function Miniblog_backLink($page, $bottom = null) +{ + global $h, $u; + + $bcklinkto = array_search($page, $h); + return Miniblog_backLinkButton($u[$bcklinkto], $bottom); +} + +/** + * Makes the back link button + */ +function Miniblog_backLinkButton($link = '', $bottom = NULL) +{ + global $plugin_tx, $plugin_cf; + + if (!$link) return false; + + $o = "\n" . ''; + + return $o; +} + + + +/** + * Returns Array of pagenumbers of subpages of a page + */ +function Miniblog_childPages($n = NULL ) +{ + global $s , $cl, $l, $cf; + $n = is_numeric($n) ? $n : $s; + + $res = array(); + $ll = $cf['menu']['levelcatch']; + for ($i = $n + 1; $i < $cl; $i++) { + if ($l[$i] <= $l[$n]) { + break; + } + if ($l[$i] <= $ll) { + $res[] = $i; + $ll = $l[$i]; + } + } + return $res; +} + + + +/** + * Adds data of blog pages to existing array of such data. + */ +function Miniblog_blogData($mblog, $page, $cat = '', $catpagenr = '', $style = '') +{ + global $plugin_cf, $plugin_tx, $h, $c, $pd_router; + + // make long plugin config var names a little shorter + $pcf = $plugin_cf['miniblog']; + + $page_data = $pd_router->find_page($page); + + if (isset($page_data['expires']) && $page_data['expires']) { + if (strtotime($page_data['expires']) < time()) return $mblog; + } + if (isset($page_data['publication_date']) && $page_data['publication_date']) { + if (strtotime($page_data['publication_date']) > time()) { + return $mblog; + } else $mblog['date'][] = $date = strtotime($page_data['publication_date']); + } else $mblog['date'][] = $date = $page_data['last_edit']; + + $mblog['archive'][] = $pcf['archive_archiving_date'] + && $date < strtotime($pcf['archive_archiving_date']) + && !$plugin_tx['miniblog']['single-file_archive_page'] + ? true + : false; + + $mblog['cat'][] = $cat; + + if ($catpagenr && $x = strpos($c[$catpagenr],'')+1); + } else $mblog['img'][] = ''; + + $mblog['pagenr'][] = $page; + $mblog['ext'][] = ''; + $mblog['style'][] = $style; + $mblog['title'][] = $page_data['show_heading'] && $page_data['heading'] + ? $page_data['heading'] + : $h[$page]; + + + if ($pcf['keyword_show_keyword']) { + if (isset($page_data['keywords']) && $page_data['keywords']) { + $mblog['keyword'][] = $page_data['keywords']; + } elseif ($pcf['keyword_2nd_source']) { + preg_match ('!'.$pcf['keyword_2nd_source'].'.*>(.*)!iU',$c[$page],$matches); + $mblog['keyword'][] = isset($matches[1])? strip_tags($matches[1]):''; + } else $mblog['keyword'][] = ''; + } + $mblog['teaser'][] = isset($page_data['description']) && $page_data['description'] + ? $page_data['description'] + : preg_replace(array( + '!\{\{\{.*($|\}\}\})!uU', + '!#CMSimple.*#!U'), + '', utf8_substr(strip_tags(substr($c[$page], + (strpos($c[$page],$pcf['teaser_2nd_source'])),550)),0, + $pcf['teaser_generated_length'])); + + return $mblog; +} + + + +/** + * Main function, returns the table of contents with teasers for the blog posts. + */ +function miniblog($page = '', $sort = '', $showcatbuttons = '', $showarchivelink = '', + $postsperpage = '', $columns = '', $showcat = '', $showdate = '', $showkeyword = '', $style = '') +{ + global $plugin_cf, $plugin_tx, $h, $c, $pd_router, $bjs, $s, $pth, $u, $sn, $sl; + + if ($s < 0) return; + + $o = ''; + $mblog = $catlist = $oldblog = array(); + $pcf = $plugin_cf['miniblog']; + $ptx = $plugin_tx['miniblog']; + + $sort = $sort !== ''? $sort : $pcf['blogpage_order_posts']; + $columns = $columns !== ''? $columns : $pcf['blogpage_2_columns']; + $showcatbuttons = $showcatbuttons !== ''? $showcatbuttons : $pcf['category_category_selection_buttons']; + $showarchivelink = $showarchivelink !== ''? $showarchivelink : $pcf['archive_show_archive_button']; + $postsperpage = $postsperpage !== ''? $postsperpage : $pcf['blogpage_limit_nr_of_posts_per_page']; + $style = $style !== ''? $style : $pcf['teaser_img_position']; + + // change config settings via plugin calling arguments + if ($page) { + $page = array_search($page, $h); + $page = $page !== false ? $page : ''; + } + + // create sortable array for posts from cmsimple pages + if ($pcf['posts_from_pages']) { + if ($pcf['category_from_pagenames_with']) { + // 1st case: category from pages with key words + + $cat = $catpage = $catselect = ''; + foreach (Miniblog_childPages($page) as $value) { + // space is masked by "__" because otherwise categories + // containing a space would be treated as 2 categories + if (strpos($h[$value],$pcf['category_from_pagenames_with']) === 0) { + $cat = str_replace(array( + $pcf['category_from_pagenames_with'], + ' '), + array('','__'), $h[$value]); + $catpage = $value; + if ($pcf['category_category_selection_buttons']) { + $catselect .= ''; + $catlist[] = $cat; + } + } else { + $mblog = Miniblog_blogData($mblog, $value, $cat, $catpage, $style); + } + } + } else { + // 2nd case: category from subpages and content from subsubpages + + foreach (Miniblog_childPages($page) as $value) { + + if (!Miniblog_childPages($value)) { + // if there are no subsubpages the content of the subpages is used as categoryless content + $mblog = Miniblog_blogData($mblog, $value); + } else { + // standard case subsubpages as content + foreach (Miniblog_childPages($value) as $subvalue) { + $mblog = Miniblog_blogData($mblog, $subvalue, $h[$value], $value, $style); + } + } + } + } + } + + // create sortable array for single file posts + if ($pcf['posts_from_single_files']) { + $posts = json_decode(file_get_contents($pth['folder']['content'].'miniblog/miniblog.php'), true); + if ($posts) { + foreach ($posts as $folder => $postings) { + if ($folder == 'folder') continue; + foreach ($postings as $post => $postdata) { + + if (isset($postdata['publish']) && $postdata['publish'] && $postdata['publish'] != 'false' + && ((!isset($postdata['blog']) || $postdata['blog'] == $h[$s]) + || !(strpos($ptx['single-file_backlinks_to'],',') || $ptx['single-file_archive_page'])) + ) + { + if ($pcf['archive_archiving_date'] && isset($postdata['archive']) && $postdata['archive'] == true) { + $mblog['archive'][] = true; + $mblog['teaser'][] = ''; + $mblog['img'][] = ''; + $mblog['style'][] = ''; + } else { + $mblog['archive'][] = false; + $mblog['teaser'][] = isset($postdata['teaser']) ? nl2br($postdata['teaser']) :''; + $mblog['img'][] = isset($postdata['img']) && $postdata['img'] + ? '' + :''; + $mblog['style'][]= isset($postdata['style']) ? $style :''; + } + $mblog['date'][] = isset($postdata['date']) ? $postdata['date'] :''; + $mblog['cat'][] = isset($postdata['cat']) ? $postdata['cat'] :''; + $mblog['keyword'][] = isset($postdata['name']) ? $postdata['name'] :''; + $mblog['pagenr'][] = ''; + $mblog['ext'][] = $ptx['single-file_blogname_in_url'] . '/' . $folder . '/' . $post; + $mblog['title'][] = $postdata['title']; + } + } + } + } + } + + // sort posts + if ($sort && $sort != '-') { + if ($sort == 'title' || $sort == 'keyword' || $sort == 'category') { + if ($sort == 'category') $sort = 'cat'; + array_multisort(array_map('uenc',$mblog[$sort]), + $mblog['title'], + $mblog['date'], + $mblog['cat'], + $mblog['keyword'], + $mblog['pagenr'], + $mblog['ext'], + $mblog['teaser'], + $mblog['archive'], + $mblog['style'], + $mblog['img']); + } else { + $sortdir = $sort == 'newest'? SORT_DESC : SORT_ASC; + array_multisort($mblog['date'], $sortdir, SORT_NUMERIC, + $mblog['cat'], + $mblog['keyword'], + $mblog['pagenr'], + $mblog['ext'], + $mblog['title'], + $mblog['teaser'], + $mblog['archive'], + $mblog['style'], + $mblog['img']); + } + } + + // start Html + $o .= "\n\n\n" . '' . str_replace('__', ' ', $cat) . '
' + : ''; + $o .= ''; + $o .= $showdate + ? "\n" . '' . $date . '' + : ''; + $o .= $showkeyword + ? "\n" . ' ' . $keyword . '' + : ''; + if ($style == 'left' && $showcat) $o .= ' (' . str_replace('__', ' ', $cat) . ')'; + $o .= '
'; + + $headstyle = $archive ? $pcf['archive_archive_headline_style'] : $pcf['teaser_headline_style']; + $o .= "\n" . '<' . $headstyle . ' class="mblog_title" ' . $titleId . '>'; + $o .= $style == 'title' || $style == 'wide_title' ? $img : '' ; + $o .= $link && $pcf['teaser_headline_is_link'] + ? $link . $title . '' + : $title; + $o .= '' . $headstyle . '>' + . "\n"; + $o .= ' '; + + if ($pcf['comments_plugin'] && !$admin && $id) { + $o .= Miniblog_commentCount($id); + } + if ($style == 'left') $o .= ''; + return $o; +} + + + +/** + * Count the number of Comments for a post, works with twocents_XH + comments_XH + */ +function Miniblog_commentCount($id) +{ + global $pth, $plugin_cf, $plugin_tx; + $o = $comments = ''; + + if ($plugin_cf['miniblog']['comments_plugin'] == "comments") { + $filetype = '.txt'; + $comments = true; + } else $filetype = '.csv'; + + if (is_file($pth['folder']['content'] . $plugin_cf['miniblog']['comments_plugin'] . '/' . $id . $filetype)) { + $file = $pth['folder']['content'] . $plugin_cf['miniblog']['comments_plugin'] . '/' . $id . $filetype; + $linecount = $comments ? -1 : 0; + $handle = fopen($file, "r"); + while(!feof($handle)){ + $line = fgets($handle); + if ($comments) $linecount++; + elseif (is_numeric($line[0])) $linecount++; + } + fclose($handle); + if($linecount > 0) { + return '' + . sprintf($plugin_tx['miniblog']['text_comments' . XH_numberSuffix($linecount)], $linecount) + . '
'; + } + } +} + + + +/** + * Make sure the next function will load after other plugins + */ +XH_afterPluginLoading( + function () { + global $s, $su, $o, $plugin_tx; + + if ($s == -1 && strpos($su, $plugin_tx['miniblog']['single-file_blogname_in_url'] . '/') === 0 + && strlen($su) > strlen(($plugin_tx['miniblog']['single-file_blogname_in_url']) + 2)) { + $o = Miniblog_extPage($su); + } + } +); + + + +/** + * Creates a temporary CMSimple_XH page from a single file blog post + */ +function Miniblog_extPage($url) { + + global $pth, $plugin_cf, $plugin_tx, $s, $tx, $su, $f, $title; + $o = ''; + + $posts = json_decode(file_get_contents($pth['folder']['content'].'miniblog/miniblog.php'), true); + list($blog,$folder,$post) = explode('/',$url); + + $tx['meta']['description'] = $posts[$folder][$post]['name'] + . ' (' . $posts[$folder][$post]['cat'] . '): ' + . $posts[$folder][$post]['teaser']; + $title = $posts[$folder][$post]['title']; + + $backlink = isset($posts[$folder][$post]['blog']) && $posts[$folder][$post]['blog'] + ? $posts[$folder][$post]['blog'] + : (!strpos($plugin_tx['miniblog']['single-file_backlinks_to'],',') + ? $plugin_tx['miniblog']['single-file_backlinks_to'] + : substr($plugin_tx['miniblog']['single-file_backlinks_to'], 0, strpos($plugin_tx['miniblog']['single-file_backlinks_to'],','))); + $o .= Miniblog_backLink($backlink); + + $o .= 'Hat man nur 2 Ebenen, dienen Seiten deren Namen mit den hier einzugebenden Schlüsselwort beginnen, z.B. \"Cat_\", als Kategorienamen für die folgenden Unterseiten der gleichen Ebene."; +$plugin_tx['miniblog']['cf_comments_plugin']="Um Kommentare bei Einzeldatei-Beiträgen zu ermöglichen, muss ein Kommentarplugin installiert werden und hier der Namen dieses Plugins eingegeben werden, so wie er in Pluginaufrufen eingegeben wird, z.B. für Twocents_XH ist einzugeben \"twocents\".
P.S.: Um Kommentare auf seitenbasierten Beiträgen zu ermöglichen, das Kommentarplugin auf der entsprechenden Seite am Textende mit Pluginbefehl aufrufen."; +$plugin_tx['miniblog']['cf_keyword_2nd_source']="Erste Quelle ist das Pagedata-Meta-Tag Keywords. Ist es leer, dient als 2. Quelle der Seitentext, und zwar entwerder die erste h6, h5, oder h4 Überschrift oder der erste fette oder kursive Text. Bleibt das Feld leer, gibt es keine 2. Quelle."; +$plugin_tx['miniblog']['cf_posts_from_members']="Wenn angekreuzt und \"From single files\" auch angekreuzt, können (über Memberpages/Register_XH) eingeloggte Nutzer/Mitglieder Blogbeiträge als Einzeldateien erstellen. Pluginaufruf {{{miniblogwriter}}}"; +$plugin_tx['miniblog']['cf_posts_from_pages']="Wenn angekreuzt nimmt Miniblog normale CMSimple-Seiten als Blogeinträge."; +$plugin_tx['miniblog']['cf_posts_from_single_files']="Wenn angekreuzt, werden Einzeldatei-Blogbeiträge gezeigt und der Admin kann sie erstellen und verwalten."; +$plugin_tx['miniblog']['cf_teaser_2nd_source']="Betrifft nur seitenbasierte Beiträge. Was ist die Textquelle der Teaser? Erste Quelle ist das Pagedata-Meta-Tag \"Description\". Ist es leer, dient als 2. Quelle der Seitentext, und zwar entwerder der Text ab der Überschrift oder ab des ersten <p>;-Absatzes."; +$plugin_tx['miniblog']['cf_teaser_generated_length']="Betrifft nur seitenbasierte Beiträge, bei denen der Teaser automatisch erzeugt wird. Hier die Zeichenanzahl eingeben, maximale Einstellung: 500"; +$plugin_tx['miniblog']['cf_teaser_headline_style']="HTML-Stil für Teaser-Überschriften auf der Blog Übersichtsseite."; +$plugin_tx['miniblog']['cf_teaser_img_path_for_members']="Pfad vom Standard-Bilder-Ordner zum Ordner, in dem Externe Artikelschreiber Bilder für den Teaser ausgewählen können. Wenn leer, kann kein Bild ausgewählt werden."; +$plugin_tx['miniblog']['cf_teaser_img_position']="Einstellung des Aussehens der Teaser auf der Blog-Seite:
top: Bild über dem Teaser
left: Bild links vom Teaser und der ganze Text rechts
title: Bild links neben Titel (als Float)
teaser: Bild links im eigentlichen Teasertext als Float unter dem Title."; +$plugin_tx['miniblog']['error_ajax']="Fehler beim Speichern der Kopfdaten. Bitte den Webmaster benachrichtigen. Der Inhalt des Blogbeitrags wird davon nicht beeinträchtigt und kann weiter bearbeitet werden."; +$plugin_tx['miniblog']['error_allowed_chars1']="Nur alphanumerische Zeichen, Bindestich, Unterstrich erlaubt"; +$plugin_tx['miniblog']['error_allowed_chars2']="Nur alphanumerische Zeichen und Bindestich erlaubt"; +$plugin_tx['miniblog']['error_category_missing']="Kategorie fehlt noch"; +$plugin_tx['miniblog']['error_date_missing']="kein Datum"; +$plugin_tx['miniblog']['error_folder_already_in_use']="Ordner wird schon von einem anderen User genutzt. Bitte anderen Ordnernamen wählen.'"; +$plugin_tx['miniblog']['error_javascript_missing']="Bitte Java-Script einschalten, andernfalls keine Funktionalität"; +$plugin_tx['miniblog']['error_no_extedit']="Das Plugin Extedit_XH ist nicht installiert"; +$plugin_tx['miniblog']['error_publishing_needs_date']="Zur Veröffentlichung benötigt der Beitrag noch ein Datum. "; +$plugin_tx['miniblog']['error_publishing_needs_title']="Zur Veröffentlichung benötigt der Beitrag noch einen Titel. "; +$plugin_tx['miniblog']['error_save_before_publishing']="Noch keine gespeicherte Textdatei gefunden. Für eine Veröffentlichung muss diese erst gespeichert werden. "; +$plugin_tx['miniblog']['error_title_missing']="Titel fehlt noch"; +$plugin_tx['miniblog']['error_not_authorised']="Zurzeit nicht freigeschaltet für das Erstellen von Beiträgen"; +$plugin_tx['miniblog']['hint_archive_config_page']="nach Änderung des Archivierungsdatums"; +$plugin_tx['miniblog']['hint_archive_language_page']="nach Änderung der Archivseite"; +$plugin_tx['miniblog']['hint_language_var']="Nicht vergessen folgende Angaben in die Sprachdatei einzutragen:
- Für Blogbeträge aus CMSimple-Seiten
- page-posts_backlinks_to: Name der Seite, zu der die Backlinks gehen. Wenn leer, werden keine Backlinks gesetzt.
- page-posts_backlinks_from: Leer lassen, außer wenn die Blogseiten keine Unterseiten der Blogstartseite sind. Dann hier die Oberseite eintragen, unter denen die Blogseiten stehen.
- single-file_blogname_in_url: Name mit dem die URLs zu den Beiträgen beginnen. Darf nicht mit einem Seitennamen von Level 1 übereinstimmen.
- single-file_category_list: Komma-getrennte Liste aller Kategorien.
- single-file_backlinks_to: Seitenname, wohin die Backlinks gehen sollen. Gibt es mehrere Blogs, dann die Seitennamen durch Kommata getrennt eingeben (nach Komma kein Leerzeichen). Beim Verfassen wird dann gefragt, für welchen Blog der Beitrag ist.
- single-file_archive_page: Wenn ein Blogarchiv auf einer Extraseite angelegt werden soll, die Seite hier angeben. Auf der Seite selbst das Archiv mit {{{miniblog}}} aufrufen.
Für Blogbeiträge aus Einzeldateien
Guten Tag %s!
Bevor Sie Beiträge verfassen können, muss für Sie ein Ordner eingerichtet werden, in dem Ihre Beiträge gespeichert werden. Der Name dieses Ordners wird in der URL Ihrer Beiträge genutzt. Er sollte aus Sicherheitsgründen besser nicht mit Ihrem Benutzernamen übereinstimmen. Nach einmaliger Eingabe werden Sie nie wieder danach gefragt.
Bitte denken Sie sich einen kurzen Ordnernamen aus, ohne Umlaute, ß, Leerzeichen und geben Sie ihn hier ein:
";
+$plugin_tx['miniblog']['text_header_blogpost']="Kopfdaten für";
+$plugin_tx['miniblog']['text_if_member_check_single_file']="Posts From members benötigt das Anschalten von Post From single files";
+$plugin_tx['miniblog']['text_image_browser']="Bild";
+$plugin_tx['miniblog']['text_image_teaser']="Bild im Teasertext";
+$plugin_tx['miniblog']['text_image_left']="Bild links, Text rechts";
+$plugin_tx['miniblog']['text_image_title']="Bild links vom Titel";
+$plugin_tx['miniblog']['text_image_top']="Bild oben";
+$plugin_tx['miniblog']['text_login_required']="Sie müssen eingeloggt sein um Blogbeiträge verfassen zu können.";
+$plugin_tx['miniblog']['text_mode_edit']="Blogbeitrag: bearbeiten";
+$plugin_tx['miniblog']['text_mode_view']="Blogbeitrag: ansehen";
+$plugin_tx['miniblog']['text_more']="… mehr »";
+$plugin_tx['miniblog']['text_name_of_delete']="Name des zu löschenden Beitrags";
+$plugin_tx['miniblog']['text_name_of_my_folder']="Mein Ordnername";
+$plugin_tx['miniblog']['text_new_blog_post']="Neuen Blogbeitrag anlegen";
+$plugin_tx['miniblog']['text_new_folder_user_mapping']="Neue Beziehung Ordner zu User eintragen";
+$plugin_tx['miniblog']['text_new_post']="Neuer Beitrag";
+$plugin_tx['miniblog']['text_no_selection']="ohne Auswahl";
+$plugin_tx['miniblog']['text_no_teaser_img']="kein Teaser-Bild";
+$plugin_tx['miniblog']['text_not_published']="nicht veröffentlicht";
+$plugin_tx['miniblog']['text_please_choose']="Bitte auswählen";
+$plugin_tx['miniblog']['text_posts_without_user']="Ordner mit Posts ohne Userzuordnung";
+$plugin_tx['miniblog']['text_publ']="veröff.";
+$plugin_tx['miniblog']['text_publish_post']="Beitrag veröffentlichen";
+$plugin_tx['miniblog']['text_published']="veröffentlicht";
+$plugin_tx['miniblog']['text_save_changes']="Änderungen speichern";
+$plugin_tx['miniblog']['text_save_header']="Kopfdaten speichern";
+$plugin_tx['miniblog']['text_saved']="Gespeichert";
+$plugin_tx['miniblog']['text_send']="Absenden";
+$plugin_tx['miniblog']['text_short_blog_title']="Kurztitel";
+$plugin_tx['miniblog']['text_teaser_editing']="Teaser (erscheint nur auf Blog-Startseite)";
+$plugin_tx['miniblog']['text_teaser_img']="Teaser-Bild";
+$plugin_tx['miniblog']['text_title_editing']="Titel (erscheint auf Blog-Startseite und über dem Blog-Beitrag)";
+$plugin_tx['miniblog']['text_today']="heute";
+$plugin_tx['miniblog']['text_usage_multicategory']="STRG → multiple Auswahl";
+$plugin_tx['miniblog']['text_usage_of_folder']="Zurzeit %s verschiedene Ordner bei Blogbeiträgen genutzt";
+$plugin_tx['miniblog']['text_user_name']="User Name";
+$plugin_tx['miniblog']['text_warning_archive']="Beiträge älter als %s werden als Archiv gekennzeichnet";
+$plugin_tx['miniblog']['text_warning_save_header']="Erst Kopf speichern";
+$plugin_tx['miniblog']['text_welcome']="Willkommen beim Verfassen von Blogbeträgen";
+$plugin_tx['miniblog']['text_wide']="2 Spalten breit";
+$plugin_tx['miniblog']['update_archive']="Aktualisiere Archiv-Zuordnung der Einzeldateibeiträge";
+$plugin_tx['miniblog']['update_archive_success']="Archiv-Werte neu zugeordnet";
+$plugin_tx['miniblog']['update_successful']="Miniblog Konfig-Datei soeben erfolgreich auf Version %s aktualisiert.";
+
+?>
diff --git a/languages/default.php b/languages/default.php
new file mode 100644
index 0000000..9a66098
--- /dev/null
+++ b/languages/default.php
@@ -0,0 +1,118 @@
+usually left empty! For page based posts Miniblog usually needs 3 levels: blog page 1st level, categories 2nd level, blog posts 3rd level. If you have only 2 levels, page names of 2nd level pages starting with the characters entered here, e.g. \"Cat_\" will serve as categories, while the remaining pages of the 2nd level serve as blog posts.";
+$plugin_tx['miniblog']['cf_comments_plugin']="If you want to enable comments on single file posts, you have to install a comment plugin and enter the name of that plugin the way it is used in its plugin call, i.e. for Twocents_XH enter \"twocents\".
P.S.: For comments on page based posts enter the plugin call on the content area just as a any other plugin call.";
+$plugin_tx['miniblog']['cf_keyword_2nd_source']="1st source is page data meta keywords. If empty, the keyword is taken from the page text, either the first h6, h5, h4 heading of the first bold or italic text. Without entry no 2nd source will be used.";
+$plugin_tx['miniblog']['cf_posts_from_members']="If checked and \"From single files\" also checked (!), logged in (via Memberpages/Register_XH) users/members can write blog posts which will be stored as single files. Plugin call {{{miniblogwriter}}}";
+$plugin_tx['miniblog']['cf_posts_from_pages']="If checked, Miniblog will look for blog posts in standard CMSimple pages.";
+$plugin_tx['miniblog']['cf_posts_from_single_files']="If checked, miniblog will look for blog post in single files, which can be edited by the admin.";
+$plugin_tx['miniblog']['cf_teaser_2nd_source']="Concerns only page based blog posts. What is the source ot the teaser text? 1st source is page data meta description. If empty, the teaser is taken from the page text, either starting right after the heading or starting from the first <p>;-paragraph.";
+$plugin_tx['miniblog']['cf_teaser_generated_length']="Concerns only page based blog posts, where the teaser is generated automatically. Enter the number of characters, maximum value: 500";
+$plugin_tx['miniblog']['cf_teaser_headline_style']="HTML style for teaser headlines in the blog page.";
+$plugin_tx['miniblog']['cf_teaser_img_path_for_members']="Path from the standard image folder to a folder, in which external posters can select an image for the blog post teaser. If empty, no image can be selected.";
+$plugin_tx['miniblog']['cf_teaser_img_position']="Setting which determines the look of the teaser on the blog page:
top: image on top of the teaser
left: image left of the teaser and all the text right of it
title: image left of the title (as float)
teaser: image left in the teaser text as float below the title.";
+$plugin_tx['miniblog']['error_ajax']="An error occured trying to save the header of your blog post. Please inform the webmaster. The contents of your blog post is not affected and you may continue working on it.";
+$plugin_tx['miniblog']['error_allowed_chars1']="Only alphanumeric chars, hyphen and underscore allowed";
+$plugin_tx['miniblog']['error_allowed_chars2']="Only alphanumeric chars and hyphen allowed";
+$plugin_tx['miniblog']['error_category_missing']="Category missing";
+$plugin_tx['miniblog']['error_date_missing']="No date";
+$plugin_tx['miniblog']['error_folder_already_in_use']="Folder already in use by another user. Please choose a different folder name.'";
+$plugin_tx['miniblog']['error_javascript_missing']="Please enable java script. otherwise no funktionality";
+$plugin_tx['miniblog']['error_no_extedit']="The plugin Extedit_XH is not installed";
+$plugin_tx['miniblog']['error_publishing_needs_date']="Please enter a date for publication of the post. ";
+$plugin_tx['miniblog']['error_publishing_needs_title']="Please enter a title for publication of the post. ";
+$plugin_tx['miniblog']['error_save_before_publishing']="Blog contents not yet saved! For publication the blog's contents must be saved. ";
+$plugin_tx['miniblog']['error_title_missing']="Title not yet given";
+$plugin_tx['miniblog']['error_not_authorised']="Presently not activated for writing of posts";
+$plugin_tx['miniblog']['hint_archive_config_page']="after changing the archiving date";
+$plugin_tx['miniblog']['hint_archive_language_page']="after changing the archive page";
+$plugin_tx['miniblog']['hint_language_var']="Important values to be set in the languages file:
- For blog posts from CMSimple pages
- page-posts_backlinks_to: Enter here the name of the blog page. If left empty there will be no backlinks.
- page-posts_backlinks_from: Leave this empty, except if your blogpages aren't subpages of the blog page but subpages of a different page. Then enter the name of that page
- single-file_blogname_in_url: The start of the URLs to the blog posts. Must differ from page names of level 1.
- single-file_category_list: Comma separated list of all your categories.
- single-file_backlinks_to: Name of page(s), towards which the backlinks lead. If you have multiple blogs, enter the names of all your blog pages as comma separated list (no spaces after commas). In the blog post header you can select to which blog the post should belong.
- single-file_archive_page: If the blog archive should be put on an extra page, enter the page name here and call the archive with {{{miniblog}}} on that page.
For blog posts from single files
Hello %s:
Before you can write blog posts, a folder has to be created for saving your posts. The name of this folder will be used in the URL to your posts. For security reasons it would be better not to use your user name als folder name. Once you entered a folder name, we won't ask for it again.
Please choose a name (without accented chars) and enter it here:
"; +$plugin_tx['miniblog']['text_header_blogpost']="Head data for"; +$plugin_tx['miniblog']['text_if_member_check_single_file']="Posts From members requires checking Post From single files"; +$plugin_tx['miniblog']['text_image_browser']="Image"; +$plugin_tx['miniblog']['text_image_teaser']="image in teaser text"; +$plugin_tx['miniblog']['text_image_left']="image left, text right"; +$plugin_tx['miniblog']['text_image_title']="image left of title"; +$plugin_tx['miniblog']['text_image_top']="image on top"; +$plugin_tx['miniblog']['text_login_required']="You have to log in to be able to write blog posts."; +$plugin_tx['miniblog']['text_mode_edit']="Blog content: edit"; +$plugin_tx['miniblog']['text_mode_view']="Blog content: view"; +$plugin_tx['miniblog']['text_more']="… more »"; +$plugin_tx['miniblog']['text_name_of_delete']="Name of the post to be deleted"; +$plugin_tx['miniblog']['text_name_of_my_folder']="Name of my folder"; +$plugin_tx['miniblog']['text_new_blog_post']="Start new blog post"; +$plugin_tx['miniblog']['text_new_folder_user_mapping']="Enter new folder-user-mapping"; +$plugin_tx['miniblog']['text_new_post']="New blog post"; +$plugin_tx['miniblog']['text_no_selection']="No selection"; +$plugin_tx['miniblog']['text_no_teaser_img']="no teaser image"; +$plugin_tx['miniblog']['text_not_published']="not published"; +$plugin_tx['miniblog']['text_please_choose']="Please choose"; +$plugin_tx['miniblog']['text_posts_without_user']="Folders with posts without matching user"; +$plugin_tx['miniblog']['text_publ']="publ."; +$plugin_tx['miniblog']['text_publish_post']="Publish post"; +$plugin_tx['miniblog']['text_published']="published"; +$plugin_tx['miniblog']['text_save_changes']="Save changes"; +$plugin_tx['miniblog']['text_save_header']="save header"; +$plugin_tx['miniblog']['text_saved']="Saved"; +$plugin_tx['miniblog']['text_send']="Send"; +$plugin_tx['miniblog']['text_short_blog_title']="Short title"; +$plugin_tx['miniblog']['text_teaser_editing']="Teaser (appears only on the blog page)"; +$plugin_tx['miniblog']['text_teaser_img']="Teaser image"; +$plugin_tx['miniblog']['text_title_editing']="Title (appears on the blog page and on top of blog post)"; +$plugin_tx['miniblog']['text_today']="today"; +$plugin_tx['miniblog']['text_usage_multicategory']="CTRL → multiple selection"; +$plugin_tx['miniblog']['text_usage_of_folder']="Presently %s different folders in use for blog posts"; +$plugin_tx['miniblog']['text_user_name']="User Name"; +$plugin_tx['miniblog']['text_warning_archive']="Posts older as %s will be mapped as archived"; +$plugin_tx['miniblog']['text_warning_save_header']="Save head data first"; +$plugin_tx['miniblog']['text_welcome']="Welcome to writing blog posts"; +$plugin_tx['miniblog']['text_wide']="2 columns wide"; +$plugin_tx['miniblog']['update_archive']="Update archive mapping of single file posts"; +$plugin_tx['miniblog']['update_archive_success']="Archive mapping sucessfully updated"; +$plugin_tx['miniblog']['update_successful']="Miniblog Config succesfully updated to version %s."; + + +?> \ No newline at end of file diff --git a/languages/en.php b/languages/en.php new file mode 100644 index 0000000..dbb96f3 --- /dev/null +++ b/languages/en.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/languages/sk.php b/languages/sk.php new file mode 100644 index 0000000..46f8d30 --- /dev/null +++ b/languages/sk.php @@ -0,0 +1,18 @@ +;-odstavcom."; +$plugin_tx['miniblog']['cf_teaser_generated_length']="Maximálne 500"; +$plugin_tx['miniblog']['cf_teaser_headline_style']="HTML-štýl pre nadpisy na zozname blogov."; +$plugin_tx['miniblog']['menu_main']="Nápoveda"; +$plugin_tx['miniblog']['more']="… viac »"; +$plugin_tx['miniblog']['usage']="
Príkaz pre plugin:
{{{miniblog}}}
Blog-Dátum:
Údaje v Page-Data > Strana > Doba zobrazenia (1. Feld)
Ak necháte prázdne, Použije sa dátum vytvorenia.
Kľúčové slovo (á):
Údaje v Page-Data > Meta > Kľúčové slová
Ak necháte prázdne, použije sa ako kľúčové slovo text stránky podľa konfigurácie.
Teaser-Text:
Údaje v Page-Data > Meta > Popis
Ak necháte prázdne, použije sa ako Teaser-Text obsah stránky podľa konfigurácie.
Kategórie:
pri blogoch na podstránkach
|
Blog-obsah
|
|__Kategória 1
| |
| |__Blog1
| |
| |__Blog2
| |
| |__Blog3
|
|__Kategória 2
|
|__Blog4
v nadpisoch ukrytých stránok
|
Blog-Obsah
|
|__Cat_Kategória 1
|
|__Blog1
|
|__Blog2
|
|__Blog3
|
|__Cat_Kategória 2
|
|__Blog4
'.$tx['heading']['error'].'
'.$ptx['error_no_extedit'].'
'; + + // proceed only for logged in users + if (isset($_SESSION['username'])) { + + $user = $_SESSION['username']; + + if ($plugin_cf['miniblog']['posts_authorised_members']) { + $authorised = explode(',',$plugin_cf['miniblog']['posts_authorised_members']); + if (!in_array($user,$authorised)) return $plugin_tx['miniblog']['error_not_authorised']; + } + + $name = isset($_SESSION['fullname'])? $_SESSION['fullname'] : $user; + + + if (!isset($posts['folder'][$user])) { + $o .= '' . $ptx['text_welcome'] . '
'; + $o .= "\n" . sprintf($ptx['text_foldernaming_request'], $name); + + $o .= '' ; + + } else { + $folder = $posts['folder'][$user]; + + // find the active post + // start with looking into $_POST + if (isset($_POST['mblogpostname'])) { + // in case of delete there is no active post + if($_POST['mblogpostname'] == 'del') { + $post = ''; + } else { + // if a post was added, this should be the active one + $post = $_POST['addpost'] + ? $_POST['addpost'] + // if neither add nor delete, the active one should be in $_POST + : ($_POST['mblogpostname'] != 'add' + ? $_POST['mblogpostname'] + : ''); + // write the found active post into a cookie + if ($post) setcookie ('mblogpostname', $post); + } + } + // if $_POST doesn't give the active post, look into $_COOKIE + if (!$post && isset($_COOKIE['mblogpostname'])) $post = $_COOKIE['mblogpostname']; + // However, wenn $_COOKIE gives the post which was deleted, no active post should be set + // and the cookie should be deleted + if (isset($_POST['mblogdelpost']) && $_POST['mblogdelpost'] + && isset($_COOKIE['mblogpostname']) + && $_COOKIE['mblogpostname'] == $_POST['mblogdelpost']) { + $post = ''; + setcookie ('mblogpostname', "", time() - 3600); + } + + // Give the user the possibility to select the post he wants to work upon + $o .= ''; + + + if ($post) $o .= Miniblog_viewEditHeader($folder, $name, $post, $posts); + + $o .= $post + ? '' + . $ptx['text_blog_post_content'] . ' ' + . extedit($user, $folder . '---' . $post) + : ''; + } + } else { + $o .= '' . $ptx['text_login_required'] . '
'; + } + + return "\n" . $o . "\n" ; +} + +/** + * Displays the header of a post, switchable to edit mode + */ +function Miniblog_viewEditHeader($folder = '', $name = '', $post, $posts, $admin = '') +{ + global $plugin_tx, $plugin_cf; + $ptx = $plugin_tx['miniblog']; + + $o = ''; + $date = isset($posts[$folder][$post]['date']) ? $posts[$folder][$post]['date'] : ''; + $title = isset($posts[$folder][$post]['title']) ? $posts[$folder][$post]['title'] : ''; + $cat = isset($posts[$folder][$post]['cat']) ? $posts[$folder][$post]['cat'] : ''; + $img = isset($posts[$folder][$post]['img']) ? $posts[$folder][$post]['img'] : ''; + $publish = isset($posts[$folder][$post]['publish']) ? $posts[$folder][$post]['publish'] : ''; + $comments= isset($posts[$folder][$post]['comments'])? $posts[$folder][$post]['comments'] : ''; + $teaser = isset($posts[$folder][$post]['teaser']) ? $posts[$folder][$post]['teaser'] : ''; + $archive = isset($posts[$folder][$post]['archive']) ? $posts[$folder][$post]['archive'] : ''; + $blog = isset($posts[$folder][$post]['blog']) ? $posts[$folder][$post]['blog'] : ''; + $style = isset($posts[$folder][$post]['style']) ? $posts[$folder][$post]['style'] : ''; + + $publ = $publish == 'true' + ? ' class="mblogPublOn">' . $ptx['text_published'] + : ' class="mblogPublOff">' . $ptx['text_not_published']; + $o .= '' . $ptx['text_header_blogpost'] . ' ' + . $ptx['single-file_blogname_in_url'] . '/' . $folder . '/' . $post + . '
'; + + $o .= $archive + ? '' + . sprintf($ptx['text_warning_archive'],$plugin_cf['miniblog']['archive_archiving_date']) + . '
' + : ''; + + $o .= ' '; + + $o .= ''; + + // author's name or the keyword of the blog post + if ($admin) { + $o .= "\n" + . '
'; + } + + // date of the blog post + $dateDisplay = $pcf['date_show_date'] || $pcf['archive_archiving_date'] ? '' : 'style="display:none;"'; + $text = $date > 1 ? date($pcf['date_format'], (int)$date) : ''; + $o .= "\n" . '' + . ' ' + . '
'; + + // Select a blog in case of multiple blogs on the site + if (strpos($ptx['single-file_backlinks_to'], ',') || $admin && $ptx['single-file_archive_page']) { + $o .= "\n" . '
'; + } else { + $o .= ''; + } + + + // Select a category for the blog post + if ($ptx['single-file_category_list']) { + $cats = explode(',',$ptx['single-file_category_list']); + $thiscats = explode(' ',$cat); + $multiple = $pcf['category_enable_multicategory'] ? ' multiple' : ''; + $o .= "\n" . '
'; + } elseif ($pcf['category_show_category_in_teaser'] || $pcf['category_category_selection_buttons']) { + $o .= "\n" . '
' + . $ptx['text_enter_category_list'] . '
'; + } else { + $o .= "\n" . ''; + } + + + // Title of the blog post + $o .= '' + . "\n" . '
'; + + // Teaser for the blog post, teaser with expanding text area. + $o .= "\n" + . '
' + . ' ' + . "\n"; + + // Select an Image for the teaser + if (!$admin) { + if ($pcf['teaser_img_path_for_members']) { + $o .= "\n" . '
'; + } else { + $o .= "\n" . ''; + } + $o .= ''; + } else { + $o .= '