diff --git a/README.md b/README.md index 8356882..6b07a82 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ dump($question->getCategories()); // Kategorien zur Frage/Antwort mit der id=3 dump($question->getUrl()); // URL zur aktuellen Seite mit Sprungmarke `question-header-{id}` ``` -Weitere Methoden unter https://github.com/yakamara/redaxo_yform/blob/master/docs/04_yorm.md +Weitere Methoden unter ### Die Klasse `qanda_category` @@ -83,37 +83,195 @@ dump(qanda_category::get(3)); // Kategorie mit der id=3 dump(qanda_category::get(3)->getAllQuestions()); // Alle Frage-Antwort-Paare der Kategorie id=3 ``` -Weitere Methoden unter https://github.com/yakamara/redaxo_yform/blob/master/docs/04_yorm.md +Weitere Methoden unter -## Nutzung im Backend: Eingabe von Fragen und Antworten. +## Nutzung im Backend: Eingabe von Fragen und Antworten ### Die Tabelle "FRAGEN" -In der Tabelle `rex_qanda` werden einzelne Frage-Antwort-Kombinationen festgehalten. Nach der Installation von `qanda` stehen folgende Felder zur Verfügung: +In der Tabelle `rex_qanda` werden einzelne Frage-Antwort-Kombinationen festgehalten. -| Typ | Typname | Name | Bezeichnung | -| -------- | ------------------- | ----------------- | ------------------- | -| value | text | question | Frage | -| validate | empty | question | | -| value | textarea | answer | Antwort | -| value | be_manager_relation | qanda_category_id | Kategorie | -| value | datestamp | createdate | Erstelldatum | -| value | be_user | updateuser | Letzte Änderung von | -| value | be_user | createuser | Autor | -| value | prio | prio | Reihenfolge | +GitHub Copilot: Hier sind die deutschen PHP-Docs in dieser Klasse mit Beispielen als Markdown: -Die wichtigsten Validierungen wurden bereits eingefügt. +#### `getCategory()` + +Gibt die erste Kategorie zurück. + +```php +$firstCategory = $question->getCategory(); +``` + +#### `getCategories()` + +Gibt alle Kategorien zurück. + +```php +$categories = $question->getCategories(); +``` + +#### `getQuestion(string|null $lang = null)` + +Gibt die Frage in der angegebenen Sprache zurück, falls vorhanden, sonst in der Standardsprache. + +```php +$question = $question->getQuestion('de'); +``` + +#### `findByIds(array $ids, float $status = 1)` + +Findet Datensätze anhand ihrer IDs. + +```php +$records = qanda::findByIds([1, 2, 3], 1.0); +``` + +#### `findByCategoryIds(array $category_ids, float $status = 1)` + +Findet Datensätze anhand ihrer Kategorie-IDs. + +```php +$records = qanda::findByCategoryIds([1, 2, 3], 1.0); +``` + +#### `getAnswer(string|null $lang = null)` + +Gibt die Antwort in der angegebenen Sprache zurück, falls vorhanden, sonst in der Standardsprache. + +```php +$answer = $question->getAnswer('de'); +``` + +GitHub Copilot: Hier sind die deutschen PHP-Docs in dieser Klasse mit Beispielen als Markdown: + +#### `getAnswerAsPlaintext(string|null $lang = null)` + +Gibt die Antwort als reinen Text (ohne HTML-Tags) in der angegebenen Sprache zurück, falls vorhanden, sonst in der Standardsprache. + +```php +$plaintextAnswer = $question->getAnswerAsPlaintext('de'); +``` + +#### `getTranslation(string|null $lang = null)` + +Gibt die Übersetzung in der angegebenen Sprache zurück, falls vorhanden, sonst die Sammlung aller Übersetzungen. + +```php +$translation = $question->getTranslation('de'); +``` + +#### `getAuthor()` + +Gibt den Autor zurück. + +```php +$author = $question->getAuthor(); +``` + +#### `getUrl(string $param = 'question-header-')` + +Gibt die URL zurück, optional mit einem spezifischen Parameter. + +```php +$url = $question->getUrl('question-header-'); +``` + +#### `showJsonLd(int|rex_yform_manager_dataset $question)` + +Gibt die JSON-LD-Darstellung einer Frage zurück. + +```php +$jsonLd = MyClass::showJsonLd($question); +``` + +#### `showFAQPage(array|rex_yform_manager_collection $questions)` + +Gibt die JSON-LD-Darstellung einer FAQ-Seite zurück. + +```php +$jsonLd = MyClass::showFAQPage($questions); +``` ### Die Tabelle "KATEGORIEN" Die Tabelle für Kategorien kann frei verändert werden, um Fragen / Antworten zu gruppieren oder zu Verschlagworten (als Tags). -| Typ | Typname | Name | Bezeichnung | -| -------- | ------- | ------ | ----------- | -| value | text | name | Titel | -| validate | unique | name | | -| validate | empty | name | | -| value | choice | status | Status | +GitHub Copilot: Hier sind die deutschen PHP-Docs in dieser Klasse mit Beispielen als Markdown: + +#### `getName()` + +Gibt den Namen der Kategorie zurück. + +```php +$name = $category->getName(); +``` + +#### `findByIds(array|string $ids, int $status = 1)` + +Findet Kategorien anhand ihrer IDs. + +```php +$categories = qanda_category::findByIds([1, 2, 3], 1); +``` + +#### `find(int $status = 1)` + +Findet Fragen, die zu dieser Kategorie gehören. + +```php +$questions = $category->find(1); +``` + +### Die Tabelle "ÜBERSETZUNGEN" + +GitHub Copilot: Hier sind alle deutschen PHP-Docs in dieser Klasse mit Beispielen als Markdown: + +#### `getAnswerAsPlaintext()` + +Gibt die Antwort als reinen Text (ohne HTML-Tags) zurück. + +```php +$plaintextAnswer = $qanda_lang->getAnswerAsPlaintext(); +``` + +#### `getQuestion()` + +Gibt die Frage zurück. + +```php +$question = $qanda_lang->getQuestion(); +``` + +#### `getAnswer()` + +Gibt die Antwort zurück. + +```php +$answer = $qanda_lang->getAnswer(); +``` + +#### `setAnswer(string $answer)` + +Setzt den Wert für die Antwort. + +```php +$qanda_lang->setAnswer('This is the answer.'); +``` + +#### `setQuestion(string $question)` + +Setzt den Wert für die Frage. + +```php +$qanda_lang->setQuestion('What is the question?'); +``` + +#### `getTranslation(int $question, string $lang)` + +Gibt die Übersetzung für eine bestimmte Frage und Sprache zurück. + +```php +$translation = qanda_lang::getTranslation(1, 'de'); +``` ## Lizenz @@ -122,8 +280,8 @@ MIT-Lizenz ## Autor **Alexander Walther** -http://www.alexplus.de -https://github.com/alexplusde + + **Projekt-Lead** [Alexander Walther](https://github.com/alexplusde) diff --git a/boot.php b/boot.php index ff9599d..bc21298 100644 --- a/boot.php +++ b/boot.php @@ -34,7 +34,7 @@ static function ($a) { // Generierung des auszugebenden Werts unter Einbeziehung beliebiger anderer Spalten // $a['value'] enthält den tatsächlichen Wert der Spalte - // $a['list']->getValue('xyz') gibt den Wert einer anderen Spalte ("xyz) zurück. + // $a['list']->getValue('xyz') gibt den Wert einer anderen Spalte ("xyz") zurück. $_csrf_key = rex_yform_manager_table::get('rex_qanda')->getCSRFKey(); $token = rex_csrf_token::factory($_csrf_key)->getUrlParams(); diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index da2e55d..0000000 --- a/docs/_config.yml +++ /dev/null @@ -1,5 +0,0 @@ -theme: jekyll-theme-minimal -title: FAQ für REDAXO 5 -description: Fragen und Antworten für REDAXO 5 auf YForm-Basis -logo: https://raw.githubusercontent.com/alexplusde/qanda/master/docs/screenshot.png -show_downloads: true diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index f5aad64..0000000 --- a/docs/index.md +++ /dev/null @@ -1,136 +0,0 @@ -# FAQ / Fragen und Antworten für REDAXO 5.x & YForm 4.x - -Mit diesem Addon können FAQ-Bereiche sowie generelle Fragen & Antworten eingegeben und verwaltet werden. Kostenlos für nicht-kommerzielle Projekte (CC BY-NC-SA 4.0). Bitte bei Fragen zur Lizenz und Nutzung qanda@alexplus.de anfragen. - -![GitHub Logo](https://raw.githubusercontent.com/alexplusde/qanda/main/docs/screenshot.png) - - -## Features - -* Vollständig mit **YForm** umgesetzt: Alle Features und Anpassungsmöglichkeiten von YForm verfügbar -* Einfach: Die Ausgabe erfolgt über [`rex_sql`](https://redaxo.org/doku/master/datenbank-queries) oder objektorientiert über [YOrm](https://github.com/yakamara/redaxo_yform_docs/blob/master/de_de/yorm.md) -* Flexibel: Filtere Fragen und Antworten nach Kategorien -* Sinnvoll: Nur ausgewählte **Rollen**/Redakteure haben Zugriff -* Suchmaschinenoptimiert: Bereit für das [JSON+LD-Format](https://jsonld.com/question-and-answer/) und Strucured Data auf Basis von schema.org -* Bereit für viel mehr: Kompatibel zum [URL2-Addon](https://github.com/tbaddade/redaxo_url) - -> **Tipp:** Das Addon arbeitet hervorragend zusammen mit den Addons [`yform_usability`](https://github.com/FriendsOfREDAXO/yform_usability/) - -> **Steuere eigene Verbesserungen** dem [GitHub-Repository von qanda](https://github.com/alexplusde/qanda) bei. Oder **unterstütze dieses Addon:** Mit einer [Beauftragung unterstützt du die Weiterentwicklung dieses AddOns](https://github.com/sponsors/alexplusde) - -## Installation - -Im REDAXO-Installer das Addon `qanda` herunterladen und installieren. Anschließend erscheint ein neuer Menüpunkt `Fragen & Antworten`. - -## Nutzung im Frontend - -### Beispiel-Modul - -```php -

FAQ-Seite

-'.$question->getQuestion().''; - echo '
'.$question->getAnswer().'
'; -} -?> -``` - -```php -

Die wichtigsten Fragen

-'.$question->getQuestion().''; - echo '
'.$question->getAnswer().'
'; - echo qanda::showJsonLd($question); -} -?> -``` - -### Die Klasse `qanda` - -Typ `rex_yform_manager_dataset`. Greift auf die Tabelle `rex_qanda` mit Fragen und Antworten zu. - -#### Beispiel-Ausgabe - -```php -$question = qanda::get(3); // Frage mit der id=3 - -// Frage und Antwort -dump($question->getQuestion()); // Frage -dump($question->getAuthor()); // Autor der Frage -dump($question->getAnswer()); // Antwort als HTML (sofern ein Editor angegeben wurde) -dump($question->getAnswerAsPlaintext()); // Antwort als Text, statt als HTML - -// Kategorie -dump($question->getCategory()); // Kategorie zur Frage/Antwort mit der id=3 -dump($question->getCategories()); // Kategorien zur Frage/Antwort mit der id=3 - -// Weitere Methoden -dump($question->getUrl()); // URL zur aktuellen Seite mit Sprungmarke `question-header-{id}` -``` - -Weitere Methoden unter https://github.com/yakamara/redaxo_yform/blob/master/docs/04_yorm.md - -### Die Klasse `qanda_category` - -Typ `rex_yform_manager_dataset`. Greift auf die Tabelle `rex_qanda_category` zu. - -#### Beispiel-Ausgabe einer Kategorie - -```php -dump(qanda_category::get(3)); // Kategorie mit der id=3 -dump(qanda_category::get(3)->getAllQuestions()); // Alle Frage-Antwort-Paare der Kategorie id=3 -``` - -Weitere Methoden unter https://github.com/yakamara/redaxo_yform/blob/master/docs/04_yorm.md - -## Nutzung im Backend: Eingabe von Fragen und Antworten. - -### Die Tabelle "FRAGEN" - -In der Tabelle `rex_qanda` werden einzelne Frage-Antwort-Kombinationen festgehalten. Nach der Installation von `qanda` stehen folgende Felder zur Verfügung: - -| Typ | Typname | Name | Bezeichnung | -| -------- | ------------------- | ----------------- | ------------------- | -| value | text | question | Frage | -| validate | empty | question | | -| value | textarea | answer | Antwort | -| value | be_manager_relation | qanda_category_id | Kategorie | -| value | datestamp | createdate | Erstelldatum | -| value | be_user | updateuser | Letzte Änderung von | -| value | be_user | createuser | Autor | -| value | prio | prio | Reihenfolge | - -Die wichtigsten Validierungen wurden bereits eingefügt. - -### Die Tabelle "KATEGORIEN" - -Die Tabelle für Kategorien kann frei verändert werden, um Fragen / Antworten zu gruppieren oder zu Verschlagworten (als Tags). - -| Typ | Typname | Name | Bezeichnung | -| -------- | ------- | ------ | ----------- | -| value | text | name | Titel | -| validate | unique | name | | -| validate | empty | name | | -| value | choice | status | Status | - -## Lizenz - -MIT-Lizenz - -## Autor - -**Alexander Walther** -http://www.alexplus.de -https://github.com/alexplusde - -**Projekt-Lead** -[Alexander Walther](https://github.com/alexplusde) - -## Credits - -qanda basiert auf: [YForm](https://github.com/yakamara/redaxo_yform) diff --git a/docs/screenshot.png b/docs/screenshot.png deleted file mode 100644 index 98b75fc..0000000 Binary files a/docs/screenshot.png and /dev/null differ diff --git a/fragments/FAQPage.json-ld.php b/fragments/FAQPage.json-ld.php index 85502c6..34e1fee 100644 --- a/fragments/FAQPage.json-ld.php +++ b/fragments/FAQPage.json-ld.php @@ -1,39 +1,50 @@ - diff --git a/fragments/qanda.json-ld.php b/fragments/qanda.json-ld.php index 548ea83..a911b4a 100644 --- a/fragments/qanda.json-ld.php +++ b/fragments/qanda.json-ld.php @@ -1,30 +1,37 @@ - \ No newline at end of file + diff --git a/lib/qanda.php b/lib/qanda.php index 3daad0b..63bd65e 100644 --- a/lib/qanda.php +++ b/lib/qanda.php @@ -2,16 +2,44 @@ class qanda extends \rex_yform_manager_dataset { - public function getCategory(): ?rex_yform_manager_dataset + /** + * Gibt die erste Kategorie zurück. + * Returns the first category. + * + * @return qanda_category|null + * + * Beispiel / Example: + * $firstCategory = $question->getCategory(); + */ + public function getCategory(): ?qanda_category { return $this->getCategories()->first(); } + /** + * Gibt alle Kategorien zurück. + * Returns all categories. + * + * @return rex_yform_manager_collection|null + * + * Beispiel / Example: + * $categories = $question->getCategories(); + */ public function getCategories(): ?rex_yform_manager_collection { return $this->getRelatedCollection('category_ids'); } + /** + * Gibt die Frage in der angegebenen Sprache zurück, falls vorhanden, sonst in der Standardsprache. + * Returns the question in the specified language if available, otherwise in the default language. + * + * @param string|null $lang Die Sprache, in der die Frage zurückgegeben werden soll. / The language in which the question should be returned. + * @return string + * + * Beispiel / Example: + * $question = $question->getQuestion('de'); + */ public function getQuestion(?string $lang = null): string { if ($lang) { @@ -19,19 +47,49 @@ public function getQuestion(?string $lang = null): string } return $this->getValue('question'); } - + /** + * Findet Datensätze anhand ihrer IDs. + * Finds records by their IDs. + * + * @param array $ids Ein Array von IDs. / An array of IDs. + * @param float $status Der minimale Status der Datensätze. / The minimum status of the records. + * @return rex_yform_manager_collection|null + * + * Beispiel / Example: + * $records = MyClass::findByIds([1, 2, 3], 1.0); + */ public static function findByIds(array $ids, float $status = 1): ?rex_yform_manager_collection { $ids = implode(',', $ids); return self::query()->whereRaw('status >= ' . $status . ' AND FIND_IN_SET(id, "' . $ids . '")')->find(); } + /** + * Findet Datensätze anhand ihrer Kategorie-IDs. + * Finds records by their category IDs. + * + * @param array $category_ids Ein Array von Kategorie-IDs. / An array of category IDs. + * @param float $status Der minimale Status der Datensätze. / The minimum status of the records. + * @return rex_yform_manager_collection|null + * + * Beispiel / Example: + * $records = MyClass::findByCategoryIds([1, 2, 3], 1.0); + */ public static function findByCategoryIds(array $category_ids, float $status = 1): ?rex_yform_manager_collection { $ids = implode(',', $category_ids); return self::query()->whereRAW('status >= ' . $status . ' AND FIND_IN_SET(category_ids, "' . $ids . '")')->find(); } - + /** + * Gibt die Antwort in der angegebenen Sprache zurück, falls vorhanden, sonst in der Standardsprache. + * Returns the answer in the specified language if available, otherwise in the default language. + * + * @param string|null $lang Die Sprache, in der die Antwort zurückgegeben werden soll. / The language in which the answer should be returned. + * @return string + * + * Beispiel / Example: + * $answer = $question->getAnswer('de'); + */ public function getAnswer(?string $lang = null): string { if ($lang) { @@ -40,6 +98,16 @@ public function getAnswer(?string $lang = null): string return $this->getValue('answer'); } + /** + * Gibt die Antwort als reinen Text (ohne HTML-Tags) in der angegebenen Sprache zurück, falls vorhanden, sonst in der Standardsprache. + * Returns the answer as plain text (without HTML tags) in the specified language if available, otherwise in the default language. + * + * @param string|null $lang Die Sprache, in der die Antwort zurückgegeben werden soll. / The language in which the answer should be returned. + * @return string + * + * Beispiel / Example: + * $plaintextAnswer = $question->getAnswerAsPlaintext('de'); + */ public function getAnswerAsPlaintext(?string $lang = null): string { if ($lang) { @@ -48,6 +116,16 @@ public function getAnswerAsPlaintext(?string $lang = null): string return strip_tags($this->getValue('answer')); } + /** + * Gibt die Übersetzung in der angegebenen Sprache zurück, falls vorhanden, sonst die Sammlung aller Übersetzungen. + * Returns the translation in the specified language if available, otherwise the collection of all translations. + * + * @param string|null $lang Die Sprache, in der die Übersetzung zurückgegeben werden soll. / The language in which the translation should be returned. + * @return mixed + * + * Beispiel / Example: + * $translation = $question->getTranslation('de'); + */ public function getTranslation(?string $lang = null): mixed { if ($lang) { @@ -55,12 +133,30 @@ public function getTranslation(?string $lang = null): mixed } return $this->getRelatedCollection('lang'); } - + /** + * Gibt den Autor zurück. + * Returns the author. + * + * @return string + * + * Beispiel / Example: + * $author = $question->getAuthor(); + */ public function getAuthor(): string { return $this->getValue('author'); } + /** + * Gibt die URL zurück, optional mit einem spezifischen Parameter. + * Returns the URL, optionally with a specific parameter. + * + * @param string $param Der Parameter, der an die URL angehängt werden soll. / The parameter to be appended to the URL. + * @return string + * + * Beispiel / Example: + * $url = $question->getUrl('question-header-'); + */ public function getUrl(string $param = 'question-header-'): string { if (rex_addon::get('yrewrite') && rex_addon::get('yrewrite')->isAvailable()) { @@ -71,7 +167,16 @@ public function getUrl(string $param = 'question-header-'): string return rtrim($host, '/') . '#' . $param . $this->getId(); } - + /** + * Gibt die JSON-LD-Darstellung einer Frage zurück. + * Returns the JSON-LD representation of a question. + * + * @param int|rex_yform_manager_dataset $question Die Frage, die dargestellt werden soll. / The question to be represented. + * @return string + * + * Beispiel / Example: + * $jsonLd = MyClass::showJsonLd($question); + */ public static function showJsonLd(int|rex_yform_manager_dataset $question): string { $fragment = new rex_fragment(); @@ -79,6 +184,16 @@ public static function showJsonLd(int|rex_yform_manager_dataset $question): stri return $fragment->parse('qanda.json-ld.php'); } + /** + * Gibt die JSON-LD-Darstellung einer FAQ-Seite zurück. + * Returns the JSON-LD representation of an FAQ page. + * + * @param array|rex_yform_manager_collection $questions Die Fragen, die auf der Seite dargestellt werden sollen. / The questions to be represented on the page. + * @return string + * + * Beispiel / Example: + * $jsonLd = MyClass::showFAQPage($questions); + */ public static function showFAQPage(array|rex_yform_manager_collection $questions): string { $fragment = new rex_fragment(); diff --git a/lib/qanda_category.php b/lib/qanda_category.php index d9565d7..bde3eb7 100644 --- a/lib/qanda_category.php +++ b/lib/qanda_category.php @@ -2,11 +2,31 @@ class qanda_category extends \rex_yform_manager_dataset { + /** + * Gibt den Namen der Kategorie zurück. + * Returns the name of the category. + * + * @return string + * + * Beispiel / Example: + * $name = $category->getName(); + */ public function getName(): string { return $this->getValue('name'); } + /** + * Findet Kategorien anhand ihrer IDs. + * Finds categories by their IDs. + * + * @param array|string $ids Ein Array oder ein String von IDs. / An array or a string of IDs. + * @param int $status Der minimale Status der Kategorien. / The minimum status of the categories. + * @return rex_yform_manager_collection|null + * + * Beispiel / Example: + * $categories = qanda_category::findByIds([1, 2, 3], 1); + */ public static function findByIds(array|string $ids, int $status = 1): ?rex_yform_manager_collection { if (is_array($ids)) { @@ -15,6 +35,16 @@ public static function findByIds(array|string $ids, int $status = 1): ?rex_yform return self::query()->whereRaw('status >= ' . $status . ' AND FIND_IN_SET(id, "' . $ids . '")')->find(); } + /** + * Findet Fragen, die zu dieser Kategorie gehören. + * Finds questions that belong to this category. + * + * @param int $status Der minimale Status der Fragen. / The minimum status of the questions. + * @return rex_yform_manager_collection|null + * + * Beispiel / Example: + * $questions = $category->find(1); + */ public function find(int $status = 1): ?rex_yform_manager_collection { return qanda::query()->where('status', $status, '>=')->whereListContains('category_ids', $this->getId())->find(); diff --git a/lib/qanda_lang.php b/lib/qanda_lang.php index bc3562d..4784af0 100644 --- a/lib/qanda_lang.php +++ b/lib/qanda_lang.php @@ -2,21 +2,87 @@ class qanda_lang extends \rex_yform_manager_dataset { + /** + * Gibt die Antwort als reinen Text (ohne HTML-Tags) zurück. + * Returns the answer as plain text (without HTML tags). + * + * @return string + * + * Beispiel / Example: + * $plaintextAnswer = $qanda_lang->getAnswerAsPlaintext(); + */ public function getAnswerAsPlaintext(): string { return strip_tags($this->getValue('answer')); } + /** + * Gibt die Frage zurück. + * Returns the question. + * + * @return string + * + * Beispiel / Example: + * $question = $qanda_lang->getQuestion(); + */ public function getQuestion(): string { return $this->getValue('question'); } + /** + * Gibt die Antwort zurück. + * Returns the answer. + * + * @return string + * + * Beispiel / Example: + * $answer = $qanda_lang->getAnswer(); + */ public function getAnswer(): string { return $this->getValue('answer'); } + /** + * Setzt den Wert für die Antwort. + * Sets the value for the answer. + * + * @param string $answer Die Antwort, die gesetzt werden soll. / The answer to be set. + * + * Beispiel / Example: + * $qanda_lang->setAnswer('This is the answer.'); + */ + public function setAnswer(string $answer): self + { + $this->setValue('answer', $answer); + return $this; + } + /** + * Setzt den Wert für die Frage. + * Sets the value for the question. + * + * @param string $question Die Frage, die gesetzt werden soll. / The question to be set. + * + * Beispiel / Example: + * $qanda_lang->setQuestion('What is the question?'); + */ + public function setQuestion(string $question): self + { + $this->setValue('question', $question); + return $this; + } + /** + * Gibt die Übersetzung für eine bestimmte Frage und Sprache zurück. + * Returns the translation for a specific question and language. + * + * @param int $question Die ID der Frage. / The ID of the question. + * @param string $lang Die ID der Sprache. / The ID of the language. + * @return self|null + * + * Beispiel / Example: + * $translation = qanda_lang::getTranslation(1, 'de'); + */ public static function getTranslation(int $question, string $lang): ?self { return self::query()->where('qanda_id', $question)->where('clang_id', $lang)->findOne(); diff --git a/package.yml b/package.yml index c918ac3..134951c 100644 --- a/package.yml +++ b/package.yml @@ -1,5 +1,5 @@ package: qanda -version: '2.1.2' +version: '2.2.0' author: 'Alexander Walther' supportpage: https://alexplusde.github.io/qanda/ load: late