Skip to content

Commit

Permalink
Add FAQPage
Browse files Browse the repository at this point in the history
close #1
  • Loading branch information
alxndr-w committed Jan 1, 2022
1 parent a442744 commit a6ef575
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 20 deletions.
50 changes: 32 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Mit diesem Addon können FAQ-Bereiche sowie generelle Fragen & Antworten eingege

* 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: Module
* 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)
Expand All @@ -26,13 +26,27 @@ Im REDAXO-Installer das Addon `qanda` herunterladen und installieren. Anschließ

### Beispiel-Modul

```php

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

echo qanda::showFAQPage(qanda::getAll());

foreach (qanda::getAll() as $question) {
echo '<details><summary>'.$question->getQuestion().'</summary>';
echo '<div class="answer">'.$question->getAnswer().'</div></details>';
}
?>
```

```php
<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);
echo qanda::showJsonLd($question);
}
?>
```
Expand Down Expand Up @@ -64,29 +78,29 @@ dump(qanda_category::get(3)); // Kategorie mit der id=3

In der Termin-Tabelle 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 |
| 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 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 |
| Typ | Typname | Name | Bezeichnung |
| -------- | ------- | ------ | ----------- |
| value | text | name | Titel |
| validate | unique | name | |
| validate | empty | name | |
| value | choice | status | Status |

## Lizenz

Expand Down
36 changes: 36 additions & 0 deletions fragments/FAQPage.json-ld.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
<?php
foreach ($this->getVar('questions') as $question) {
?>

"@type": "Question",
"name": <?= json_encode($question->getQuestion(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK); ?> ,
"text": <?= json_encode($question->getValue('answer'), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK); ?> ,
"answerCount": 1,
"dateCreated": "<?= htmlentities($question->getValue('createdate'), ENT_QUOTES, 'UTF-8'); ?>",
"author": {
"@type": "Person",
"name": <?= json_encode($question->getAuthor(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK); ?>
},
"acceptedAnswer": {
"@type": "Answer",
"text": <?= json_encode($question->getQuestion(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK); ?> ,
"upvoteCount": 0,
"url": "<?= htmlentities($question->getUrl(), ENT_QUOTES, 'UTF-8'); ?>",
"dateCreated": "<?= htmlentities($question->getValue('updatedate'), ENT_QUOTES, 'UTF-8'); ?>",
"author": {
"@type": "Person",
"name": <?= json_encode($question->getAuthor(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK); ?>
}
}
}, {
<?php
}
?>
}]
}
</script>
6 changes: 6 additions & 0 deletions lib/qanda.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,10 @@ public function showJsonLd($question)
$fragment->setVar("question", $question);
return $fragment->parse('qanda.json-ld.php');
}
public function showFAQPage($questions)
{
$fragment = new rex_fragment;
$fragment->setVar("questions", $questions);
return $fragment->parse('FAQPage.json-ld.php');
}
}
4 changes: 2 additions & 2 deletions package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# stattdessen den Entwickler unterstützen?
# https://alexplusde.github.io/qanda/
package: qanda
version: '2.0.3'
version: '2.0.4'
author: 'Alexander Walther'
supportpage: https://alexplusde.github.io/qanda/
load: late
Expand All @@ -13,7 +13,7 @@ requires:
version: '^7.3'
redaxo: ^5.10
packages:
yform: '>=3.4'
yform: '>=4.0,<5'

page:
title: translate:qanda
Expand Down

0 comments on commit a6ef575

Please sign in to comment.