NOVO AIRDROP Na Rede da Solana [Flow3] Veja como Ganhar suas Pontuações e Comece Agora Mesmo

#dc#batman#dc comics#tim drake#dick grayson#batfam#bruce wayne#dc fanart#batfamily
seen from United States
seen from Pakistan

seen from Azerbaijan
seen from China
seen from United States
seen from China

seen from United States
seen from Japan
seen from China
seen from United States
seen from Philippines
seen from China

seen from Australia
seen from Pakistan

seen from United States

seen from United States
seen from Germany

seen from United States
seen from United States

seen from Germany
NOVO AIRDROP Na Rede da Solana [Flow3] Veja como Ganhar suas Pontuações e Comece Agora Mesmo
Программа Амбассадоров Flow3: присоединяйтесь к развитию будущего DePIN & AI, получайте эксклюзивные преимущества
Flow3 Network запускает Ambassador Program, приглашая увлеченных людей помочь стимулировать рост децентрализованных вычислений и приложений на базе ИИ. Это ваш шанс стать частью процветающей экосистемы DePIN, получая при этом эксклюзивные преимущества.
Flow3 Network запускает Ambassador Program, приглашая увлеченных людей помочь стимулировать рост децентрализованных вычислений и приложений
WEB+DB PRESS PHP連載第6回「TYPO3 Flowでドメイン駆動設計入門」を執筆しました
技術評論社WEB+DB PRESSのPHP連載「巨人の肩からPHP - 先人たちに学ぶモダンプログラミング」の連載第6回「TYPO3 Flowでドメイン駆動設計入門」を収録したvol.74が発売されます。
WEB+DB PRESS Vol.74|gihyo.jp … 技術評論社
第6回では、ドメイン駆動設計を取り上げています。ドメイン駆動設計の基本概念と、実際にドメイン駆動設計のスタイルでソフトウェアを開発する時の要点から解説しています。また、ドメイン駆動設計でアプリケーションを開発することを全面的に謳ったフレームワークTYPO3 Flowを使って、DIの機能などを使いながらサンプリアプリケーションを実装していく流れも解説しています。
TYPO3 Flow Enterprise PHP Framework
WEB+DB PRESS vol.74には、アリエル・ネットワーク株式会社井上誠一郎氏による特集「良い設計の基礎知識」も収録されています。依存とは何か、モジュールの安定/不安定と依存性の方向といった、巨人の肩からPHPの連載やPHPメンターズブログで扱っている事柄が、難しいと感じさせない文章で解説されています。PHP連載と合わせて、この特集記事もお読みになると、知識が補完されるかと思います。
Einige haben es ja bereits mitbekommen; seit einigen Tagen beschäftige ich mich mit dem FLOW3 Enterprise PHP Framework. FLOW3 ist vom TYPO3 Entwicklungs Team entwickelt worden um der neue Generation von TPYO3 aka TYPO3 “Phoenix” (Version 5) ein neues Gerüst zu schaffen. Zwar steckt noch FLOW3 noch etwas in den Kinderschuhen, aber bisher sieht alles doch recht danach aus das es diese Bald in den Schrank packen kann. Es gibt zwar die eine oder andere Baustelle, in meinem jetzigen Blog ist dies die Lokalisierung.
Als erstes zu beachten ist das die Lokalisierung erst ab Version 1.1 verfügbar ist. Ich hatte zuerst mit dem 1.0 Release probiert, da ich dachte ich nehme lieber eine Version die nicht als “Beta” deklariert ist, aber ohne Lokalisierung wollte ich dann auch nicht
Wie funktioniert die Lokalisierung?
Standartmäßig sucht FLOW3 innerhalb der Resourcen des Packetes nach übersetzungen im Verzeichnis “Resources/Private/Translations/”. Dort sollte für jede Sprache ein Unterverzeichnis existieren. Als Beispiel: “de” oder “en”. Innerhalb dieser Verzeichnisse legt man nun Dateien in XLIFF Format an. Man kann mehrere Dateien anlegen, um so eine Strukturierung der Übersetzungen anzulegen. Beispielsweise pro Model oder pro Controller. Da sollte man schauen wie man es bevorzugt. Standartmäßig wird die Datei “Main.xlf” benutzt, wenn man die Entsprechende Argumente leer läßt.
Beispiel einer XLIFF Datei:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
<?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file original="" source-language="en" target-language="de" datatype="plaintext"> <body> <trans-unit id="header"> <source>Header</source> <target>Überschrift</target> </trans-unit> <trans-unit id="subheader"> <source>Subheader</source> <target>Unterüberschrift</target> </trans-unit> <trans-unit id="impress"> <source>Impress</source> <target>Impressum</target> </trans-unit> </body> </file> </xliff>
In Zeile 4 und 5 kann man die Parameter “source-language” und “target-language” erkennen. Diese müssen entsprechend der gegebenheiten Angepasst werden. Bei meinem Projekt habe ich die Englische Sprache bei der Ausgabe sowie der Variablen- und Modeldeklarierung gewählt. Im Grunde ist das ja eigentlich auch egal, wobei es in der FLOW3 Umgebung einige dinge zu beachten sind, aber dies soll hier nicht Thema des Blogs werden
Also zurück zum Thema; es gibt zwei Arten wie man die Übersetzung laufen lassen kann:
Übersetzung anhand einer ID (trans-unit id=”")
Übersetzung anhand eines Labels
Letzteres Bedeutet er nimmt den Text den man Als “dummy” genommen hat, und sucht in den XLIFF Dateien in den “source” Abschnitten nach diesem Wort und übersetzt dieses dann. Mir persönlich gefällt die erste Variante, da damit weniger Fehlerquellen vorhanden sind. Außerdem soll laut der Dokumentation der Lokalisierung die Übersetzung anhand der ID schneller funktionieren. Und gerade das Thema der Schnelligkeit will ich mit FLOW3 ausprobieren.
1 2 3 4 5 6
<f:translate id="header" /> <pre>Ausgabe: Überschrift</pre> <f:translate id="subheader" source="Main">Subheader</f:translate> <pre>Ausgabe: Unterüberschrift</pre> <f:translate source="Main">Impress</f:translate> <pre>Ausgabe: Impressum</pre>
Es wird ebenfalls empfohlen die Übersetzung der englischen Sprache zu erstellen. Zueinem wird einem dann das Log nicht vollgehauen und zum anderem kann man so auch Anpassungen bei Rechtschreibung oder Gramatik vornehmen ohne die Entsprechende “Source” in allen Übersetzungen zu ändern.
Möglichkeit des Plurals
Ebenfalls Erwähnenswert ist die Funktion der Übersetzung nach Einzahl und Mehrzahl. Als Beispiel sei dort mal 1 Tag oder 2 Tage erwähnt. Nun könnte man natürlich hingehen und in FLUID eine Bedingung einfügen, aber wer will das schon??
1 2 3 4 5 6 7 8 9 10
<group id="date.day" restype="x-gettext-plurals"> <trans-unit id="date.day[0]"> <source>{0} day</source> <target>{0} Tag</target> </trans-unit> <trans-unit id="date.day[1]"> <source>{0} days</source> <target>{0} Tage</target> </trans-unit> </group>
Nun kann man im Fluid das ganze Wie folgt ansprechen:
1 2 3 4
<f:translate id="date.day" source="Main" arguments="{0: 4}/> Ausgabe: 4 Tage <f:translate id="date.day" source="Main" arguments="{0: 1}/> Ausgabe: 1 Tag
Wir sehen nun, es gibt auch die Möglichkeit von Variablen:
1 2 3 4
<trans-unit id="some.label"> <source>{0} times {1,number}</source> <target>{1,number} mal {0}</target> </trans-unit>
Hier wird dann ebenfalls mit dem parameter “arguments” gearbeitet:
1
<f:translate id="some.label" source="Main" arguments="{0: 'bla', 1: 5}/>
Nun haben wir soviele Übersetzungen angelegt und im Template ausprobiert, und einige werden sich wundern warum Sie keine Deutsche Übersetzung angezeigt bekommen. Ja, blöd das sowas auch immer erst zum (fast) Schluss kommt, aber wie heißt es so schön, erst lesen!
Ich musste allerdings auch eine Weile suchen bis ich die Richtige Stelle gefunden habe wo man das aktiviert.
In der Settings.yaml (Global, Umgebung oder Packet) kann man mit den folgenden Einstellungen die default Sprache ändern:
1 2 3 4
TYPO3: FLOW3: i18n: defaultLocale: de
Mir war dies allerdings nicht genug! Bei meiner suche in den Classes, Models usw. bin ich auf einen Language Detector gestoßen. Nun frage ich mich natürlich, wie aktiviere ich diesen? Automatisch momentan wohl gerade nicht. Ich habe zwar im Forge davon gelesen und auch per Twitter wurde mir gesagt das es mit etwas Glück noch in die 1.1 schafft. Dank geht übrigens an dieser Stelle an Robert Lemke und Karsten Dambekalns die mir per Twitter die Richtung gewiesen haben
Meine Lösung: Im Controller den Language Detector starten, erkennen lassen und ans Fluid übergeben
1 2 3 4 5 6 7 8 9 10
/** * @var \TYPO3\FLOW3\I18n\Locale */ protected $lang; public function initializeView(\TYPO3\FLOW3\Mvc\View\ViewInterface $view) { $detector = new \TYPO3\FLOW3\I18n\Detector(); $this->lang = $detector->detectLocaleFromHttpHeader($_SERVER["HTTP_ACCEPT_LANGUAGE"]); $view->assign('langDetector', $this->lang); }
In diesem Beispiel sage ich dem Detector er soll anhand der HTTP Anfrage herrausfinden welche Sprache bevorzugt wird. Durch die Verwendung der Klasse “initializeView” hat nun jede Action im Controller diese Variable zugewiesen. Anschließend habe ich jedem TranslateViewHelper, oder auch der Translate Option vom SelectViewHelper das Argument “locale” angehangen:
1
<f:translate id="header" locale="{langDetector.language}">Header</f:translate>
Wo wir nun im Controller angekommen sind, wie übersetzt man eigentlich hier? Mit dem Translator Objekt:
1 2 3 4 5 6 7 8 9 10
/** * @var \TYPO3\FLOW3\I18n\Translator * @FLOW3\Inject */ protected $translator; public function indexAction() { $header = $this->translator->translateById('header', array(), NULL, $this->lang,'Main','Package'); }
So… das war erstmal mein erster längerer Blog-Beitrag Ich hoffe er hilft den einen oder anderen bei seiner Suche weiter. Da ich noch recht neu in der Blogger-Welt bin, nehme ich natürlich gerne Konstruktive Kritik entgegen
Google+
FLOW3 / FLUID MultiSelect Checkboxes in an edit form
Now you got your multiple checkboxes running, you propably want an edit form, where the correct values are "checked". Well - FLOW3 and FLUID do not offer such a feature out of the box. But it is shockingly easy to write an own viewhelper which does just that.
Go to <yourflow3root>/Packages/YOURCOMPANY/YOURAPP/Classes/ViewHelpers (create the folder ViewHelpers if not already there)
Create a new File called "IsCheckedViewHelper.php"
Paste the following code: http://pastebin.com/C9BXd0rs
In the second line adjust the namespace according to your project
Go to your template where you want to use the viewhelper
At the top add:
{namespace custom=YOURCOMPANY\YOURAPP\ViewHelpers}
In the <f:form.checkbox> tag add:
checked="{custom:isChecked(object:'{singleobject}', collection:'{model.collection}') }"
Change {singleobject} and {model.collection} to your specific names.
Great success!
Multiple Checkboxes with FLOW3 / FLUID
Another simple problem you might think - you're wrong! In FLOW3 with FLUID templating it's not an out of the box feature - it requires some serious brain work.
What's the issue?!
Let's say you have a form to edit contents of a closet. The user can select which clothes are in the closet. The clothes are stored in an array via the controller:
$this->view->assign("clothes",array("shirts","jackets","shoes"));
In your form you want a list of checkboxes to select the clothes. So in FLUID you would propably do something like:
<f:for each="{allcategories}" as="singlecategory"> <label class="checkbox"> <f:form.checkbox multiple="true" property="categories" value="{singlecategory}" /> {singlecategory.name} </label> </f:for>
Which is perfectly correct. But here comes the problem: FLUID checks whether the checkbox should be checked or not and has to load the object containing the clothes for it. That can not work if you are trying to add a new closet. FLOW3 will throw an exception:
No value found for key "TYPO3\Fluid\ViewHelpers\FormViewHelper->formObject"
It's a bug in the checkbox viewhelper. (Look here http://forge.typo3.org/issues/35894)
Steps to fix it (as for Version FLOW3 1.1 BETA 1):
Go to <FLOW3ROOT>/Packages/Framework/TYPO3.Fluid/Classes/ViewHelpers/Form/CheckboxViewHelper.php and open the file.
Go to line 80
Add a check whether the object is existent: After $this->isObjectAccessorMode() add && $this->viewHelperVariableContainer->exists('TYPO3\Fluid\ViewHelpers\FormViewHelper', 'formObject') so it becomes:
if ($this->isObjectAccessorMode() && $this->viewHelperVariableContainer->exists('TYPO3\Fluid\ViewHelpers\FormViewHelper', 'formObject')) {
Great success!
A simple datepicker with FLOW3 / FLUID
I'm playing around with FLOW3 and it's template engine fluid. At one point I was in need for a simple datepicker widget for giving my users a nice and clean way to select a date. The backend job is to convert the date given by the user to a dateobject that can be persistet in the database.
So i read a lot of the FLOW3 documentation and there was no mention whatsoever in any forum, blog or the official docs about a datepicker.
Well - good news: The FLOW3 package TYPO3.Form is the solution to your problem. Just follow these simple steps:
Fire up terminal and head to the base folder of your FLOW3 installation. Enter the following command:
./flow3 package:import TYPO3.Form
Clear your caches by entering:
./flow3 flow3:cache:flush
If not already present, add jQuery and jQuery UI (be sure to enable datepicker) to your layout:
<script type="text/javascript" src="path/to/jquery.js"></script> <script type="text/javascript" src="path/to/jqueryui.js"></script> <link rel="stylesheet" type="text/css" href="path/to/jqueryui.css"</link>
In your template (e.g. /classes/controllers/postcontroller.php) add:
{namespace form=TYPO3\Form\ViewHelpers}
Add the datepicker element to your form:
<form:form.datePicker id="date" property="date" />
The capital P in datePicker is neccessary!
Success! Refresh your form and you should be given a nice jQuery DatePicker which does dateobject conversion on its own :)
If there is a better way of doing this please leave a message.
Happy datepicking!
Using TYPO3.Media
So I wanted to have some nice shiny images in my Application. After a first try using \TYPO3\FLOW3\Resource\Resource directly in my Model (which worked fine, but left me alone when I wanted to have thumbnails), I checked the TYPO3.Media package, and tada!
So here we go:
Install the needed packages
TYPO3.Media depends on Imagine
$> ./flow3 package:import Imagine $> ./flow3 package:import TYPO3.Media
Add the Image to your Model
class Event { //... /** * * @var \TYPO3\Media\Domain\Model\Image * @ORM\OneToOne(cascade={"all"}, orphanRemoval=true) * */ protected $image; //... }
Provide a form to edit it
Don't forget to add enctype="multipart/form-data" to your form.
We're using the TYPO3.Media ImageViewHelper for a thumbnail.
{namespace media=TYPO3\Media\ViewHelpers} <f:form enctype="multipart/form-data" action="update" name="event" object="{event}"> <!-- ... --> <f:if condition="{event.image}"> <media:image image="{event.image}" alt="An image, AN IMAGE!!!" maximumWidth="50" /> </f:if> <f:form.upload property="image.resource" /> <!-- ... --> </f:form>