Code Monkey home page Code Monkey logo

qanda's Introduction

FAQ / Fragen und Antworten für REDAXO 5.x & YForm 4.x

GitHub Logo

Features

  • Vollständig mit YForm umgesetzt: Alle Features und Anpassungsmöglichkeiten von YForm verfügbar
  • Einfach: Die Ausgabe erfolgt über rex_sql oder objektorientiert über YOrm
  • Flexibel: Filtere Fragen und Antworten nach Kategorien
  • Sinnvoll: Nur ausgewählte Rollen/Redakteure haben Zugriff
  • Suchmaschinenoptimiert: Bereit für das JSON+LD-Format und Strucured Data auf Basis von schema.org
  • Bereit für viel mehr: Kompatibel zum URL2-Addon

Tipp: Das Addon arbeitet hervorragend zusammen mit den Addons yform_usability

Steuere eigene Verbesserungen dem GitHub-Repository von qanda bei. Oder unterstütze dieses Addon: Mit einer Beauftragung unterstützt du die Weiterentwicklung dieses AddOns

Installation

Im REDAXO-Installer das Addon qanda herunterladen und installieren. Anschließend erscheint ein neuer Menüpunkt Fragen & Antworten.

Nutzung im Frontend

Beispiel-Modul

<h1>FAQ-Seite</h1>
<?php

echo qanda::showFAQPage(qanda::getAll()); // Json+ld

foreach (qanda::getAll() as $question) {
    echo '<details><summary>'.$question->getQuestion().'</summary>';
    echo '<div class="answer">'.$question->getAnswer().'</div></details>';
}
?>
<h3>Die wichtigsten Fragen</h3>
<?php
foreach (qanda::getAll() as $question) {
    echo '<details><summary>'.$question->getQuestion().'</summary>';
    echo '<div class="answer">'.$question->getAnswer().'</div></details>';
    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

$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

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.

GitHub Copilot: Hier sind die deutschen PHP-Docs in dieser Klasse mit Beispielen als Markdown:

getCategory()

Gibt die erste Kategorie zurück.

$firstCategory = $question->getCategory();

getCategories()

Gibt alle Kategorien zurück.

$categories = $question->getCategories();

getQuestion(string|null $lang = null)

Gibt die Frage in der angegebenen Sprache zurück, falls vorhanden, sonst in der Standardsprache.

$question = $question->getQuestion('de');

findByIds(array $ids, float $status = 1)

Findet Datensätze anhand ihrer IDs.

$records = qanda::findByIds([1, 2, 3], 1.0);

findByCategoryIds(array $category_ids, float $status = 1)

Findet Datensätze anhand ihrer Kategorie-IDs.

$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.

$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.

$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.

$translation = $question->getTranslation('de');

getAuthor()

Gibt den Autor zurück.

$author = $question->getAuthor();

getUrl(string $param = 'question-header-')

Gibt die URL zurück, optional mit einem spezifischen Parameter.

$url = $question->getUrl('question-header-');

showJsonLd(int|rex_yform_manager_dataset $question)

Gibt die JSON-LD-Darstellung einer Frage zurück.

$jsonLd = MyClass::showJsonLd($question);

showFAQPage(array|rex_yform_manager_collection $questions)

Gibt die JSON-LD-Darstellung einer FAQ-Seite zurück.

$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).

GitHub Copilot: Hier sind die deutschen PHP-Docs in dieser Klasse mit Beispielen als Markdown:

getName()

Gibt den Namen der Kategorie zurück.

$name = $category->getName();

findByIds(array|string $ids, int $status = 1)

Findet Kategorien anhand ihrer IDs.

$categories = qanda_category::findByIds([1, 2, 3], 1);

find(int $status = 1)

Findet Fragen, die zu dieser Kategorie gehören.

$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.

$plaintextAnswer = $qanda_lang->getAnswerAsPlaintext();

getQuestion()

Gibt die Frage zurück.

$question = $qanda_lang->getQuestion();

getAnswer()

Gibt die Antwort zurück.

$answer = $qanda_lang->getAnswer();

setAnswer(string $answer)

Setzt den Wert für die Antwort.

$qanda_lang->setAnswer('This is the answer.');

setQuestion(string $question)

Setzt den Wert für die Frage.

$qanda_lang->setQuestion('What is the question?');

getTranslation(int $question, string $lang)

Gibt die Übersetzung für eine bestimmte Frage und Sprache zurück.

$translation = qanda_lang::getTranslation(1, 'de');

Lizenz

MIT-Lizenz

Autor

Alexander Walther
http://www.alexplus.de
https://github.com/alexplusde

Projekt-Lead
Alexander Walther

Credits

qanda basiert auf: YForm

qanda's People

Contributors

alxndr-w avatar ingowinter avatar tyrant88 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

alxndr-w

qanda's Issues

Leeres Element in strukturieren Daten entfernen

Probleme vom Typ „FAQs für strukturierte Daten“ in selbsthilfe-ka.de erkannt

An den Inhaber von :

Die Search Console hat festgestellt, dass Ihre Website von 1 Problem(en) des Typs „FAQs für strukturierte Daten“ betroffen ist. Auf Ihrer Website wurden die folgenden Probleme gefunden. Wir empfehlen, diese Probleme nach Möglichkeit zu beheben, damit die Google Suche optimal funktioniert und eine hohe Reichweite hat.

Häufigste nicht kritische Probleme**
Ungültiger Objekttyp für Feld "mainEntity"

Missing $table declaration for model class "qanda_lang"

Wenn ich versuche mit $question->getTranslation($currentClangId) die Übersetzung eines Eintrags zu bekommen, bekomme ich eine Whoops! Seite mit dem Fehler:

RuntimeException: Missing $table declaration for model class "qanda_lang"
File: redaxo/src/addons/yform/plugins/manager/lib/yform/manager/dataset.php
Line: 759

Stacktrace
Function File Line
rex_yform_manager_dataset::modelToTable redaxo/src/addons/yform/plugins/manager/lib/yform/manager/dataset.php 153
rex_yform_manager_dataset::query redaxo/src/addons/qanda/lib/qanda_lang.php 22
qanda_lang::getTranslation redaxo/src/addons/qanda/lib/qanda.php 54
qanda->getTranslation rex:///module/237/output 43
require redaxo/cache/addons/structure/114.1.content 94
require redaxo/src/addons/structure/plugins/content/lib/article_content.php 123
rex_article_content->getArticle rex:///template/3 8
require redaxo/src/addons/structure/plugins/content/lib/article_content_base.php 456
rex_article_content_base->{closure} redaxo/src/core/lib/util/timer.php 62
rex_timer::measure redaxo/src/addons/structure/plugins/content/lib/article_content_base.php 457
rex_article_content_base->getArticleTemplate redaxo/src/addons/structure/plugins/content/boot.php 58
rex_package::{closure} redaxo/src/core/lib/extension.php 52
rex_extension::{closure} redaxo/src/core/lib/util/timer.php 62
rex_timer::measure redaxo/src/core/lib/extension.php 63
rex_extension::registerPoint redaxo/src/core/frontend.php 22
require redaxo/src/core/boot.php 155
require index.php 9
System report (REDAXO 5.15.1, PHP 8.1.18, MySQL 5.7.42)
REDAXO
Version 5.15.1
PHP
Version 8.1.18
OPcache yes
Xdebug no
Database
Version MySQL 5.7.42
Character set utf8
Warning Die verwendete MySQL-Version 5.7.42 wird nicht mehr vom Hersteller gepflegt und sollte aktualisiert werden.
Database 2
Version MySQL 5.7.42
Database 3
Version MySQL 5.7.42
Server
OS Linux
SAPI fpm-fcgi
Webserver Apache/2.4.29
Request
Browser Chrome/119.0.0.0
Protocol HTTP/2.0
HTTPS yes
Packages
adminer 1.9.3
api_docs 1.1.0
awtranslator 0.1
backup 2.9.0
be_logger 0.1.0beta1
be_password 2.0.1
be_style 3.2.0
be_style/customizer 3.2.0
be_style/redaxo 3.2.0
be_tools 1.8.0
bloecks 3.1.1
bloecks/cutncopy 3.1.1
ckeditor 4.20.2
clear_content 1.1.1
consent_manager 4.2.0
cronjob 2.10.0
d2u_helper 1.13.0
d2u_helper/translation_helper 1.13.0
developer 3.9.2
evol-colorpicker 0.1
fa_iconpicker 1.2.0
feeds 4.0.7
ff_ai_bild_beschreibung 0.1.0
ff_degas 0.1.1
ff_gpt_tools 0.1
ffmpeg 1.0.1
global_settings 2.8.4
gridblock 1.1.12
gridblock/contentsettings 1.7.1
gridblock/synchronizer 1.0
iconpicker 1.1.0
install 2.11.1
lottie 1.0.2
maintenance 2.9.2
markitup 3.7.4
markitup/documentation 1.1.0
mblock 3.4.13
media_manager 2.14.0
media_manager_autorewrite 2.0.1
mediapool 2.13.0
mediapool_rename 1.0.0
metainfo 2.10.0
mform 7.3.0
mform/docs 1.1
minify 2.2.1
modulsammlung 4.16.0
nv_modulepreview 1.6.1-beta
omi_citrix 1.0.0
omi_pardot 1.0.2
omi_pardot/documentation 1.0.0
omi_sync 1.0
phpmailer 2.12.0
plyr 3.23.4
project dev
qanda 2.1.0
sprog 1.5.1
structure 2.15.0
structure/content 2.15.0
structure/history 2.15.0
structure_tweaks 1.4.0
theme 1.4.0
tinymce5 1.2.17
ui_tools 1.2.2
ui_tools/jquery-minicolors 2.4.0
usage_check 2.5
users 2.10.0
watson 2.3.0
xoutputfilter 3.0.0
xoutputfilter/documentation 1.0.0
xoutputfilter/frontend 3.0.0
xoutputfilter/import_export 3.0.0
yform 4.1.1
yform/docs 3.3.1
yform/email 4.1.1
yform/manager 4.1.1
yform/rest 4.1.1
yform/tools 4.1.1
yform_spam_protection 1.2.3
yform_usability 2.1.4
yrewrite 2.10.0
yrewrite_scheme 3.7.2

Googeln hat nichts gebracht.

Mehrsprachigkeit

Projektbezogen wäre es hilfreich, die FAQs auch mehrsprachig anzulegen.
Ansonsten ist qanda ein wirklich hilfreiches Addon, danke!

Liebe Grüße, Natalie Schäfer

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.