Hey Corian,
danke für dein Angebot ^^.
War gestern leider etwas spät geworden bei mir.
Ich habe jetzt zumindest schonmal nen Anfang und versuch nun das nen bissl zu optimieren.
Der Anfang war ziemlich schwer, bei diesem View und Controller krams durchzublicken. Ich denke für einige "Ex 1.1 prozedural Hobby Coder" wäre es sicherlich hilfreich nen kleines Tutorial zu machen ^^.
Aber hier mal meine, ähhm, Ausgabe ^^. Fällt dir nochwas auf was man da noch verbessern könnte?
So siehts gerade aus in der Ausgabe
<div class="panel-body">
<div id="json_output">
{"1":{"ARTIKELTEASER":"Sea of Thieves","ARTIKELTITEL":"Sea of Thieves - Erster Eindruck","ARTIKELIMAGE":"https:\/\/underground-community.com\/application\/modules\/media\/static\/upload\/5a69f5188df5611.png","ARTIKELIMAGESOURCE":"Keine Quelle angegeben","ARTIKELCONTENT":"Seit dem 24.01.18 läuft die Closed Beta von "Sea of Thives", dessen Entwicklerstudio "Rare" unter anderem auch für Donkey Kong Country verantwortlich war.Im Rahmen einer Einladung zur Closed Beta durfte ich also Sea of Thieves zocken und muss sagen, dass die ersten Eindrücke sehr positiv sind. Daher möchte ich einen kleinen Einblick in meine Erlebnisse geben.Wir werden beim starten des Games gleich feststellen, dass es sich um eine Alpha-Version handelt, so zumindest laut Startbildschirm.Okay, soweit verstanden ^^, also drücken wir einfach einen Button der uns gleich zu einer Auswahlmöglichkeit weiterleitet. Hier können wir nun auswählen welches art oder modi des Onlinegames wir gerne spielen möchten. Ich entschied mich meist für das erste Multicrew Schiff auf dem bis zu 4 Spieler platz finden. Bei dem mittelren Modus könnt ihr zu zweit euer unwesen treiben, wobei hier auch das Schiff kleiner ist und weniger Kanonen an Board hat. Als letztes habt ihr noch die Möglichkeit alleine in See zu stechen, ohne nervige Mates ;) .In der "Lobby" angekommen habt ihr die Möglichkeit noch eure Freunde an Board zu holen. Ansonsten werden euch nach Bestätigung 3 Leute zugewiesen mit denen ihr die See erobern könnt.Wie dem auch sei, starten wir meistens auf einer kleinen Insel, einem Outpost. Hier befinden wir uns in einer Art Kneipe für Hobbypiraten ^^. Manchmal joint ihr auch einer bereits bestehenden Crew, wo evtl. einer der Mitglieder der Session geleaved ist. Hierbei joint ihr dort, wo euer Schiff eben gerade ist.Zurück zum Outpost: Dort finden sich neben eueren neuen Crewmitgliedern auch einige Fässer. In diesen sind z.B. Kanonenkugeln, Bananen oder Holzplanken. Nehmt mit was ihr tragen könnt, denn man kann nie genug davon haben.Ihr macht euch auf dem Weg zum Schiff, welches beim Outpost vor Anker liegt. Auf dem Deck angekommen werdet ihr wohl feststellen, dass irgendeiner immer zuspät kommt ^^. Also wartet bis die Crew vollständig versammelt ist bevor ihr los schippert.Manch einer wird so überwältigt sein von der Atmosphäre der Umgebung, dass er glatt das Sprechen verlernt hat und euch nicht zu Antworten vermag, wenn ihr InGame Voice benutzt. Aber das scheint normal zu sein, da ja nicht jeder ein Mikrofon besitzt (*hust*).Alle versammeln sich also in der Kapitänskajüte und Voten für ein Abenteuer, eine Mission die euch auf die Reise schickt einen Schatz zu bergen. Nachdem erfolgreich gevotet wurde, erhaltet ihr eine Karte auf der entweder die Insel zu sehen ist auf der sich der Schatz befindet, oder eine Art kleines Rätsel in Textform, welches mehr richtung Reim geht, aber eigendlich leicht zu verstehen ist.Ihr oder auch einer, der des lesens einer Karte mächtig ist und mit Kompass umgehen kann, sucht die Insel auf einer Karte und gibt den Kurs an den Steuermann weiter.Nun können ganz nach rollenspiel Strategie, oder auch wild durchgewürfelt, alle Crewimitglieder anpacken das Schiff startklar zu machen. Es müssen der Anker eingeholt, die Segel gesetzt und das Steuerrad ergriffen werden.Bei großen Schiffen lohnt es sich zusammen am Ankerrad anzupacken, da es zu zweit oder gar zu viert um einiges schneller geht.Wenn nun die Segel gesetzt wurden und alles soweit ok ist, hat der Steuermann vollste Kontrolle über das Wohlergehen des Schiffen, denn es können im Meer so einige Sachen auf euch lauern. Schiffswracks die aus dem Meer ragen, kleiner Sandbänke, kleine und auch große Felsbrocken. Daher lohnt es sich wenn einer im Aussichtsturm oder ganz vorne am Schiff stellung bezieht und ein wachsames Auge auf die See hat und jedes ungewöhnliche Objekt an den Kapitän weiterzuleiten.Während der Fahrt sollte immer darauf geachtet werden, dass die Segel im Wind stehen. Die Windrichtung erkennt man an gut dargestellten kleinen Linien welche ihre Bahnen durch den Himmel ziehen, aber dennoch nicht im Gameplay störend wirken. Nebenbei ist es immer gut ein Mitglied im Aussichtsturm zu haben der die See nach Schiffen absucht, denn es passiert nicht selten, dass andere Piraten versuchen euch zu berauben, in dem Glauben, dass ihr gerade erfolgreich von einer Schatzsuche zum Outpost unterwegs seid.Solltet ihr einmal beschossen werden und einige Treffer kassieren, dann liegt es an der Crew schnell zu handeln, damit das Schiff nicht voll Wasser läuft. Hierzu werdet ihr Holzplanken brauchen die ihr auf die Löcher im Schiffsbauch nageln müsst.Ihr habt also nun euere Zielinsel erreicht und wisst auch schon wo der Schatz vergraben sein sollte. Buddelt ihn aus während die Crewmitglieder euch Skelette, die aus dem Boden hinaus kriechen und euch das Leben schwer machen wollen, bekämpfen. Mit dem erbeuteten Schatz und evtl. anderen tollen Sachen die ihr während eurer Schatzsuche auf der Insel ergattern konntet, macht ihr euch wieder auf den Weg zurück zum Schiff.Auf dem Schiff angekommen werft ihr noch einen Blick zurück auf die tolle Insel, um euch dieses Abenteuer noch lange im Gedächtnis zu behalten.Ihr setzt also wieder die Segel, lichtet den Anker, setzt Kurs auf den nächten Outpost und schippert dem Gold entgegen. Doch oh oh... da braut sich was zusammen...Nun heist es entweder ihr umschifft den Sturm, oder ihr wagt die Durchfahrt in das Monstrum. Ich entscheide mich dazu das "Monstrum" zu umschiffen, da durch den vielen Regen und den Sturm das Schiff voll Wasser läuft und ihr alle Hände zu tun haben werdet das Schiff am sinken zu hindern. Zudem kann auch mal der Blitz einschlagen und euch dabei erwischen.Am Ende seid ihr sicher am Outpost angelangt und habt euren Schatz verkauft und einiges an Gold dafür bekommen, wovon ihr euch neue Items, Werkzeuge und neue Schatzkarten kaufen könnt um in das nächste Abenteuer zu starten. Doch erst wartet ihr am besten ab wo der Sturm hinziehen wird. Neben viel Schatzsucherei und dem ausweichen von Stürmen hatte ich auch das ein oder andere mal das Vergnügen, einer tollen Crew beizutreten. Mit ihnen konnte ich Seeschlachten gegen andere Piraten führen, Kanonen auf Schiffe ballern und diese zum sinken bewegen, Schätze des untergegangenen Schiffes einsammeln und mich auch im Nahkampf erproben.Sea of Thieves ist ein Game indem es reichlich Action und viel zu sehen gibt. Die Spannung segelt immer mit und lässt einen eintauchen in ein gut umgesetztes Piratenabenteuer. Da die Entwickler noch Content vorenthalten bis zum Release, wird bis auf die Spielwelt und deren schöne Orte, feindliche Piratenspieler und Insel Skelette, das bergen von Schätzen und die Exploration, nicht viel Umfang an strategischen Ausweichmöglichkeiten oder andersweitige Arten des Piratenlebens geboten. Ich finde auch mehr Schiffstypen wären toll sowie eine größere Map. Die Map an sich ist ganz cool, aber nach ein paar Tagen Spielzeit kennt man die Map auswendig.Ich hoffe, dass noch einiges an Dynamik ins Spiel kommt, denn bis jetzt wirkt alles, bis auf die Spieler und der Sturm, sehr statisch.Trotz allem ist dieses Game ein Hingucker und kann, wenn beim Release noch einiges dazukommen sollte, einen in viele tolle Monate des Piratenlebens begleiten.Ich wünsche den Entwicklern viel Erfolg und empfehle das Game, falls noch Content kommen sollte, gerne weiter, wenn auch ungern für den Preis von rund 70€. Ich hoffe ihr lasst noch mit euch verhandeln ^^.Vielen Dank.","ARTIKELAUTHORPROFIL":"https:\/\/underground-community.com\/index.php\/user\/profil\/index\/user\/1","ARTIKELAUTHORNAME":"Raptusguru","ARTIKELDATE":"25.Januar2018","ARTIKELTIME":"17:09","ARTIKELCATEGORIENAME":"Games","ARTIKELCATEGORIEURL":"https:\/\/underground-community.com\/index.php\/mobileilch\/cats\/show\/id\/3","ARTIKELVISITS":30,"ARTIKELKEYWORDS":"Sea of Thieves, Closed Beta, Piratenabenteuer, Games, Open World, Survival, Schatzsuche, Rare, Windows, Raptusguru, Underground-Community, XBOX, Unreal Engine"},"2":{"ARTIKELTEASER":"Slender Man Trailer","ARTIKELTITEL":"Slender Man ab Mai im Kino","ARTIKELIMAGE":"https:\/\/underground-community.com\/application\/modules\/media\/static\/upload\/5a69f5188df5611.png","ARTIKELIMAGESOURCE":"Keine Quelle angegeben","ARTIKELCONTENT":"Horror Fans aufgepasst: Slender Man..... na klingelts?Slender Man wird uns bald in den Kinos gesellschaft leisten und hoffentlich für schaurigen Horror sorgen ^^. Wer das Game kennt wird sicherlich die eine oder andere verstörende Situation im Hinterkopf behalten haben und wir alle hoffen, dass der Film genau dieses feeling vermitteln wird.Hier der Trailer. ","ARTIKELAUTHORPROFIL":"https:\/\/underground-community.com\/index.php\/user\/profil\/index\/user\/1","ARTIKELAUTHORNAME":"Raptusguru","ARTIKELDATE":"03.Januar2018","ARTIKELTIME":"21:41","ARTIKELCATEGORIENAME":"Games","ARTIKELCATEGORIEURL":"https:\/\/underground-community.com\/index.php\/mobileilch\/cats\/show\/id\/3","ARTIKELVISITS":33,"ARTIKELKEYWORDS":"Slender Man, Trailer, Kino Trailer Slender Man, Gaming, Raptusguru, Multigaming, Underground-community"},"3":{"ARTIKELTEASER":"Das Jahr ist geschafft","ARTIKELTITEL":"Das Jahr neigt sich dem Ende zu","ARTIKELIMAGE":"https:\/\/underground-community.com\/application\/modules\/media\/static\/upload\/5a44c037c2a32Feuerwerk_Raketen.jpg","ARTIKELIMAGESOURCE":"Keine Quelle angegeben","ARTIKELCONTENT":"Liebe Gäste, User, Member und Admins,das Jahr neigt sich dem Ende zu. Wir durften viele neue Stimmen in unserem Community-Discord begrüßen, haben viele gemeinsame Abende ingame verbracht und viel gelacht, gehatet und geraged ^^. Zocken ist ein Auf und Ab der Emotionen xD.Wir sind nun schon seit 2009 in verschiedenen Games unterwegs und hoffen, dass uns das nächste Jahr wieder zahlreiche neue User und Member vorbei schickt die genau wie wir, die Leidenschaft des zockens teilen.Im Groben und Ganzen lässt sich sagen, dass es doch ein ziemlich erfolgreiches Jahr war, vorallem weil wir niemanden Bannen mussten xP. Klar gabs hier und da mal kleinere Differenzen, aber die gehören in einer Gemeinschaft eben dazu und wir freuen uns, dass es auch nur bei kleineren Streitigkeiten geblieben ist.Wir schauen nun richtung 2018 und wünschen allen Gästen, Usern, Membern und Admins einen super, feucht-fröhlichen Rutsch ins neue Jahr und wir würden uns freuen jeden Einzelnen im neuen Jahr wiederzusehen.Viele liebe GrüßeUnderground-Community","ARTIKELAUTHORPROFIL":"https:\/\/underground-community.com\/index.php\/user\/profil\/index\/user\/1","ARTIKELAUTHORNAME":"Raptusguru","ARTIKELDATE":"28.Dezember2017","ARTIKELTIME":"11:00","ARTIKELCATEGORIENAME":"Allgemein","ARTIKELCATEGORIEURL":"https:\/\/underground-community.com\/index.php\/mobileilch\/cats\/show\/id\/1","ARTIKELVISITS":58,"ARTIKELKEYWORDS":"underground-community, Raptusguru, Discord, Discordbot, Multigaming, Battlefield, Minecraft, LoL, CS:GO, Gaming"}} </div>
</div>
Und hier meine View:
<?php
$articles = $this->get('articles');
$categoryMapper = $this->get('categoryMapper');
$commentMapper = $this->get('commentMapper');
$userMapper = $this->get('userMapper');
$adminAccess = null;
if ($this->getUser()) {
$adminAccess = $this->getUser()->isAdmin();
}
?>
<?php if ($articles != ''){
$displayedArticles = 0;
foreach ($articles as $article){
if (!is_in_array($this->get('readAccess'), explode(',', $article->getReadAccess())) && $adminAccess == false) {
continue;
}
$displayedArticles++;
$date = new \Ilch\Date($article->getDateCreated());
$commentsCount = $commentMapper->getCountComments(sprintf(Modules\Article\Config\Config::COMMENT_KEY_TPL, $article->getId()));
$image = $article->getImage();
$imageSource = $article->getImageSource();
$catIds = explode(",", $article->getCatId());
$categoriesURL = '';
$categoriesNAME = '';
foreach ($catIds as $catId) {
$articlesCats = $categoryMapper->getCategoryById($catId);
$categoriesURL .= $this->getUrl(['controller' => 'cats', 'action' => 'show', 'id' => $catId]);
$categoriesNAME .= $articlesCats->getName();
}
if ($article->getTeaser()){
$TEASER = $this->escape($article->getTeaser());
}
$TITEL = $this->escape($article->getTitle());
if (!empty($image)){
$ARTICLEIMAGE = $this->getBaseUrl($image);
if (!empty($imageSource)){
$IMAGESOURCE = $this->escape($imageSource);
}
else {
$IMAGESOURCE = 'Keine Quelle angegeben';
}
}
$content = $article->getContent();
/*
if (strpos($content, '[PREVIEWSTOP]') !== false){
$contentParts = explode('[PREVIEWSTOP]', $content);
reset($contentParts);
$this->getUrl(['action' => 'show', 'id' => $article->getId()]);
}
else {
$CONTENT = $content;
}
*/
$CONTENT = $content;
if ($article->getAuthorId() != ''){
$user = $userMapper->getUserById($article->getAuthorId());
if ($user != ''){
$AUTHORPROFIL = $this->getUrl(['module' => 'user', 'controller' => 'profil', 'action' => 'index', 'user' => $user->getId()]);
$AUTHORNAME = $this->escape($user->getName());
}
}
$ARTICLEDATE = $date->format('d.', true) . $this->getTrans($date->format('F', true)) . $date->format('Y', true);
$ARTICLETIME = $date->format('H:i', true);
$ARTICLECATEGORIENAME = rtrim($categoriesNAME, ', ');
$ARTICLECATEGORIEURL = rtrim($categoriesURL, ', ');
$ARTICLEVISITS = $article->getVisits();
if ($article->getKeywords() != ''){
$ARTICLEKEYWORDS = $article->getKeywords();
}
$prepareForJSON[$displayedArticles] = array('ARTIKELTEASER' => $TEASER,
'ARTIKELTITEL' => $TITEL,
'ARTIKELIMAGE' => $ARTICLEIMAGE,
'ARTIKELIMAGESOURCE' => $IMAGESOURCE,
'ARTIKELCONTENT' => str_replace(["\r\n", "\r", "\n"], "", strip_tags($CONTENT)),
'ARTIKELAUTHORPROFIL' => $AUTHORPROFIL,
'ARTIKELAUTHORNAME' => $AUTHORNAME,
'ARTIKELDATE' => $ARTICLEDATE,
'ARTIKELTIME' => $ARTICLETIME,
'ARTIKELCATEGORIENAME' => $ARTICLECATEGORIENAME,
'ARTIKELCATEGORIEURL' => $ARTICLECATEGORIEURL,
'ARTIKELVISITS' => $ARTICLEVISITS,
'ARTIKELKEYWORDS' => $ARTICLEKEYWORDS);
}?>
<div id='json_output'>
<? echo json_encode($prepareForJSON, JSON_FORCE_OBJECT); ?>
</div>
<?
}
?>
MFG