PageRenderTime 55ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 1ms

/docs/index.rst

https://bitbucket.org/webvariants/varilog
ReStructuredText | 314 lines | 238 code | 76 blank | 0 comment | 0 complexity | 3d0bdcd3b244bf3bc031b43c29d99b09 MD5 | raw file
  1. varilog
  2. =======
  3. varilog bietet ein einfaches Blogsystem für SallyCMS, das mittels Artikeltypen
  4. und dem Gästebuch-AddOn die Grundfunktionen eines Blogs anbietet, aber bei
  5. weitem nicht so umfangreich wie WordPress o.ä. ist. Support für Trackbacks und
  6. Pingbacks ist integriert.
  7. Installation
  8. ------------
  9. Das AddOn sollte über Composer installiert werden, indem :file:`composer.json`
  10. des Projekts um einen Eintrag erweitert wird:
  11. .. sourcecode:: json
  12. {
  13. "require": {
  14. "webvariants/varilog": "*"
  15. }
  16. }
  17. Nach einem ``composer install`` können dann varilog und dessen Abhängigkeiten
  18. installiert werden. Damit steht ein Blog ohne Kommentarfunktion bereit.
  19. Kommentare
  20. """"""""""
  21. Um die Beiträge kommentierbar zu machen, kann das Gästebuch-AddOn verwendet
  22. werden. Es wird analog zu varilog eingerichtet:
  23. .. sourcecode:: json
  24. {
  25. "require": {
  26. "webvariants/varilog": "*",
  27. "webvariants/guestbook": "*"
  28. }
  29. }
  30. varilog und das Gästebuch kennen sich grundsätzlich nicht; der Projektentwickler
  31. ist dafür verantwortlich, beide im Frontend miteinander zu kombinieren.
  32. Konfiguration
  33. -------------
  34. Der Grundgedanke bei varilog ist der, dass es über reguläre Sally-Artikel
  35. arbeitet, die anhand ihres Artikeltyps identifiziert werden. So kann in varilog
  36. angegeben werden, dass alles Artikel eines bestimmten Typs als Blogbeiträge
  37. angesehen werden soll.
  38. Bevor mit der Einrichtung begonnen wird, müssen die nötigen Konfigurationsdateien
  39. noch nach ``develop/config`` kopiert werden. In beiden AddOns liegen jeweils
  40. Vorgabedateien, die kopiert und deren Kopien dann nach Bedarf angepasst werden
  41. können.
  42. Ausgangssituation
  43. """""""""""""""""
  44. Wir wollen einen Blog mit Kommentarfunktion (über das Gästebuch) und einer
  45. Übersicht aller Beiträge erstellen. Dazu benötigen wir einige Module sowie etwas
  46. Konfiguration, die im Folgenden beschrieben werden.
  47. Blogübersicht
  48. """""""""""""
  49. **Modul-Eingabe (blogoverview.input.php)**
  50. Für die Moduleingabe sind meist keine besonderen Felder nötig. Man kann sich das
  51. hier also sehr einfach machen und einfach eine kurze Infomeldung ausgeben. Damit
  52. der Redakteur im Backend ein paar nützliche Informationen erhält, geben wir die
  53. Liste aller Blogbeiträge im Backend aus.
  54. Die Blogartikel holen wir uns über ``WV32_Provider::getArticles()``. Danach
  55. laufen wir nur noch über das Array ``$articles`` und verlinken jeden Artikel.
  56. .. sourcecode:: php
  57. <?
  58. /**
  59. * @sly name blogoverview
  60. * @sly title Blogübersicht
  61. */
  62. $articles = WV32_Provider::getArticles(
  63. true, // nur Beiträge, die online sind
  64. 'updatedate', // sortiert nach Aktualisierungsdatum
  65. 'DESC' // absteigend sortiert
  66. );
  67. print '<p style="padding:5px">Dieses Modul listet alle Blogeinträge auf.</p>';
  68. print '<ul>';
  69. foreach ($articles as $article) {
  70. $url = $article->getUrl();
  71. $name = sly_html($article->getName());
  72. print '<li><a href="../'.$url.'">'.$name.'</a></li>';
  73. }
  74. print '</ul>';
  75. **Modul-Ausgabe (blogoverview.output.php)**
  76. Hier wollen wir unsere Blogbeiträge ausgeben.
  77. .. sourcecode:: php
  78. <?
  79. /**
  80. * @sly name blogoverview
  81. * @sly title Blogübersicht
  82. */
  83. $articles = WV32_Provider::getArticles(true, 'updatedate', 'DESC');
  84. // $articles ist keine Liste von sly_Model_Article-Objekten, sondern eine
  85. // Liste von WV32_Article-Objekten. Das sind spezielle Wrapper um die eigentlichen
  86. // Artikel und bieten Zusatzfunktionen zum Abrufen der Tags und dergleichen.
  87. foreach ($articles as $article) {
  88. $url = $article->getUrl();
  89. $date = $article->getCreateDate('%d. %m. %Y');
  90. $name = sly_html($article->getName());
  91. $content = $article->getContent();
  92. // Hier findet die Integration mit dem Gästebuch statt. Für jeden
  93. // varilog-Beitrag gibt es potenziell ein Gästebuch namens 'article_X'
  94. // (X ist die Artikel-ID), das die Kommentare enthält. Wir wollen hier nur
  95. // die Gesamtanzahl von Kommentaren ermitteln.
  96. // Der Name des Gästebuchs (article_X) muss mit der Konfiguration des
  97. // Gästebuch-AddOns (develop/guestbook.yml) übereinstimmen!
  98. $comments = WV19_Provider::getCount(false, array(), 'article_'.$article->getId());
  99. ?>
  100. <div class="blog">
  101. <a href="<?= $url ?>">
  102. <h1><?= $name ?></h1>
  103. <span class="time"><?= $date ?></span>
  104. </a>
  105. <div class="wymeditor">
  106. <?
  107. print $content;
  108. if ($comments > 0) {
  109. echo '<div class="comments"><a href="'.$url.'">'.$comments.' Kommentar(e)</a></div>';
  110. }
  111. ?>
  112. </div>
  113. </div>
  114. <?
  115. }
  116. Dass ``->getUrl()``, ``->getName()`` etc. auf ``$article`` funktionieren, liegt
  117. daran, dass ``WV32_Article`` diese Methode entsprechend auf ``sly_Model_Article``
  118. weiterleitet. Es gibt nicht für alle Methoden diese Proxies, sodass teils auch
  119. der Zugriff auf den "echten" Artikel notwendig ist. Dieser kann über
  120. ``$article->getArticleModel()`` abgerufen werden.
  121. Das war es schon. Jetzt haben wir eine "schöne" Blogübersicht, die unsere
  122. Artikel nach Datum absteigend anzeigt. Das einzige was wir noch machen müssen,
  123. ist eine Kategorie "Blog" zu erstellen und darin einen Artikel, dem wir dieses
  124. Modul zuweisen. Der Name ist natürlich frei wählbar.
  125. Blogartikel
  126. """""""""""
  127. Kommen wir zu den eigentlichen Blogbeiträgen. Hier bauen wir uns unseren
  128. eigentlichen Beitrag mit dem Gästebuch und den Einträgen auf. Den Beitrag selbst
  129. zu holen entspricht dem Vorgehen aus der Blogübersicht. Da wir ja alle auflisten
  130. können, können wir auch eines ausgeben. Das interessantere ist das Gästebuch.
  131. Typischerweise gibt es zwar einen Blog-Artikeltyp und ein dazugehöriges Template,
  132. allerdings keine speziellen Blog-Module. Es ist in den meisten Fällen falsch,
  133. sich extra das CKEditor-Modul zu kopieren und es "Blogbeitrag" zu nennen.
  134. Stattdessen sollten in Blogartikeln ganz normaler Content zum Einsatz kommen.
  135. Das Blogbeitrag-Template unterscheidet sich also nicht großartig von den anderen
  136. Templates eines Projekts, außer dass ggf. mehr, blogspezifische Informationen
  137. wie die Trackback-URL oder ein Kommentarformular mit ausgegeben werden.
  138. Kommentare
  139. """"""""""
  140. Weder varilog noch das Gästebuch-AddOn geben vor, welche Felder es für Kommentare
  141. geben muss. Überlicherweise werden **Name**, **eMail-Adresse**, **Homepage**
  142. sowie ein **Text** erfasst. Auf Wunsch können allerdings auch mehr oder weniger
  143. Felder verwendet werden. Im Folgenden gehen wir von den o.g. Feldern aus.
  144. Die dazu nötige Konfiguration des Gästebuchs (``develop/guestbook.yml``) sähe
  145. damit in etwa so aus:
  146. .. sourcecode:: yaml
  147. # ...
  148. -
  149. pattern: 'article_*'
  150. fields:
  151. name: { name: 'Name', type: 'input' }
  152. email: { name: 'eMail', type: 'input' }
  153. homepage: { name: 'Homepage', type: 'input' }
  154. text: { name: 'Text', type: 'textarea' }
  155. display: ['name', 'email', 'homepage', 'text', 'wv19_edit_count', 'wv19_updated']
  156. format: '#text%short#'
  157. pause: 0
  158. visibility:
  159. default: false
  160. onedit: false
  161. # ...
  162. Nun könnte der Code zum Anzeigen der Kommentare wie folgt gestaltet werden:
  163. .. sourcecode:: php
  164. <?
  165. // printBlogArticle();
  166. // handleCommentFormSubmission();
  167. // printCommentForm();
  168. $guestbook = new WV19_Guestbook('article_'.$article->getId());
  169. $comments = $guestbook->getEntries();
  170. print '<div id="comments">';
  171. foreach ($comments as $comment) {
  172. // auf keinen Fall sly_html() vergessen!
  173. $name = sly_html($comment->getValue('name'));
  174. $text = sly_html($entry->getValue('text'));
  175. $date = date('d.m.Y',strtotime($entry->getPosted()));
  176. ?>
  177. <div class="comment">
  178. <div class="title">von <strong class="autor"><?= $name ?></strong>, am <strong class="date"><?= $date ?></strong> geschrieben</div>
  179. <div class="content"><?= $text ?></div>
  180. </div>
  181. <?
  182. }
  183. print '</div>';
  184. Ein dazu passenden Kommentar-Formular kann in einfachem HTML geschrieben oder
  185. mittels Form-Evaluation-AddOn entwickelt werden. In HTML könnte es wie folgt
  186. aussehen:
  187. .. sourcecode:: html
  188. <div id="guestbook_form">
  189. <form class="commentform" action="<?= $article->getUrl() ?>" method="post">
  190. <div class="commentbox">
  191. <input type="text" name="name" placeholder="Name" />
  192. <input type="text" name="email" placeholder="eMail-Adresse eingeben" />
  193. <textarea name="commenttext" rows="5" cols="5" placeholder="Ihr Kommentar"></textarea>
  194. </div>
  195. <div>
  196. <input type="submit" name="send_comment" id="send_comment" value="Absenden" />
  197. </div>
  198. </form>
  199. </div>
  200. Dieses Formular wird auf den Blogartikel selbst abgeschickt, sodass es sich
  201. hier ganz gut macht, die Auswertung direkt im Blogtemplate vorzunehmen.
  202. .. sourcecode:: php
  203. <?
  204. /**
  205. * @sly name blog
  206. * @sly title Mein Blogtemplate
  207. */
  208. // der aktuelle, aufgerufene Artikel
  209. $article = WV32_Article::getInstance();
  210. // Kommentare könnten deaktiviert sein
  211. if (!empty($_POST) && $article->commentsEnabled()) {
  212. $guestbook = new WV19_Guestbook('article_'.$article->getId());
  213. $name = sly_post('name', 'string');
  214. $email = sly_post('email', 'string');
  215. $text = sly_post('commenttext', 'string');
  216. try {
  217. // erstelle den Kommentar, 2. Argument ist die IP des Clients, damit
  218. // das AddOn vor Flooding schützen kann
  219. $entry = $guestbook->post(array(
  220. 'name' => $name,
  221. 'email' => $email,
  222. 'text' => $text
  223. ), $_SERVER['REMOTE_ADDR']);
  224. // hier theoretisch noch den Seiteninhaber per Mail benachrichtigen
  225. // auf Wunsch kann jetzt entweder direkt der Artikel angezeigt oder
  226. // auf ihn weitergeleitet werden (um doppelte Form Submissions zu
  227. // vermeiden).
  228. }
  229. catch (Exception $e) {
  230. print '<p>Der Kommentar konnte nicht erstellt werden: '.sly_html($e->getMessage()).'</p>';
  231. }
  232. }
  233. // hier kann nun der Rest folgen: Artikel anzeigen, Kommentare anzeigen etc.
  234. Weitere Informationen
  235. ---------------------
  236. * `Repository <https://bitbucket.org/webvariants/varilog>`_
  237. * `Bug Tracker <https://bitbucket.org/webvariants/varilog/issues>`_
  238. * `Gästebuch-AddOn <https://bitbucket.org/webvariants/guestbook>`_