diff --git a/.gitignore b/.gitignore index 925011d..4fb60ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/.idea /composer.lock /.php-cs-fixer.cache /vendor diff --git a/composer.json b/composer.json index 5855596..e8dda5e 100644 --- a/composer.json +++ b/composer.json @@ -3,6 +3,10 @@ "redaxo/php-cs-fixer-config": "^2.0", "friendsofphp/php-cs-fixer": "^3.14" }, + "replace": { + "psr/log": "*", + "psr/container": "*" + }, "scripts": { "cs-dry": "php-cs-fixer fix -v --ansi --dry-run --config=.php-cs-fixer.dist.php", "cs-fix": "php-cs-fixer fix -v --ansi --config=.php-cs-fixer.dist.php" diff --git a/docs/01_d_example.md b/docs/01_d_example.md new file mode 100644 index 0000000..3979a42 --- /dev/null +++ b/docs/01_d_example.md @@ -0,0 +1,46 @@ +# Beispiel und Fragmente + +Wurde Neues mit dem URL-Addon installiert und entsprechend der [Anleitung](/redaxo/index.php?page=neues/docs&mdfile=06_url) konfiguriert, kannst du dir eine Beispielvorlage für die Ausgabe im Template ausgeben lassen. + +Die Ausgabe erfolgt über Fragment-Dateien. Diese findest du im Ordner `fragments/neues`. Die Fragmente können nach Belieben angepasst werden. Weitere Informationen zu Fragmenten findest du in der [Redaxo-Dokumentation](https://redaxo.org/doku/main/fragmente). + +Im Template, in dem du die Ausgabe von Neues realisieren möchtest, fügst du folgenden Code ein: + +```php +getDatasetId(); + echo neues::getEntry($postId); + } else { + // Ausgabe einer Liste + echo neues::getList(); + } +?> +``` + + +## Methoden + +### getEntry(int $postId) + +Gibt einen einzelnen Datensatz aus. Benötigt wird die ID des Datensatzes. + +```php +$entry = neues::getEntry(1); +``` + +### getList(int $rowsPerPage = 10, string $pageCursor = 'page') + +Gibt eine Liste aller Datensätze als HTML aus. + +- rowsPerPage: Anzahl der Datensätze pro Seite. Standard: `10` +- pageCursor: Name des GET-Parameters, der die aktuelle Seite enthält. Standard: `page` + + +```php +$list = neues::getList(); +``` \ No newline at end of file diff --git a/fragments/neues/entry.php b/fragments/neues/entry.php new file mode 100644 index 0000000..13723ca --- /dev/null +++ b/fragments/neues/entry.php @@ -0,0 +1,78 @@ +getVar('post'); +?> + +
+
+
+
+ + + getName()) : ?> +

getName()) ?>

+ + + + getPublishDate()) : ?> + + + + + getImage()) : ?> + getImage()); + ?> + +
+ <?= htmlspecialchars($media->getTitle()) ?> +
+ + + + + + getDescription()) : ?> +
+ getDescription() ?> +
+ + + + getImages()) : ?> +
+ getImages() as $image) : ?> + + +
+ + <?= htmlspecialchars($media->getTitle()) ?> + +
+ + +
+ + +
+ +
+
+
\ No newline at end of file diff --git a/fragments/neues/list-entry.php b/fragments/neues/list-entry.php new file mode 100644 index 0000000..effc3d6 --- /dev/null +++ b/fragments/neues/list-entry.php @@ -0,0 +1,52 @@ +getVar('post'); +?> + +
+
+ + + getCategories()) : ?> +

+ getCategories()->toKeyValue('id', 'name'))) ?> +

+ + + + getName()) : ?> +

+ getName() ?> +

+ + + + getPublishDate()) : ?> +
+ getFormattedPublishDate() ?> +
+ + + + getTeaser()) : ?> +

+ getTeaser()) ?> +

+ +
+ + + getImage()) : ?> + getImage()); + $mediaUrl = rex_media_manager::getUrl('rex_media_medium', $post->getImage()); + ?> + +
+ <?= htmlspecialchars($media->getTitle()) ?> +
+ + +
\ No newline at end of file diff --git a/fragments/neues/list.php b/fragments/neues/list.php new file mode 100644 index 0000000..3de9301 --- /dev/null +++ b/fragments/neues/list.php @@ -0,0 +1,31 @@ +getVar('pager'); + +/** @var rex_yform_manager_collection $posts */ +$posts = $this->getVar('posts'); +?> + + +
+
+ +
+ setVar('post', $post); + echo $fragment->parse('neues/list-entry.php'); + ?> +
+ +
+
+ + +setVar('pager', $pager); +echo $fragment->parse('neues/pagination.php'); +?> \ No newline at end of file diff --git a/fragments/neues/pagination.php b/fragments/neues/pagination.php new file mode 100644 index 0000000..d056bdc --- /dev/null +++ b/fragments/neues/pagination.php @@ -0,0 +1,72 @@ +getVar('pager'); + +$currentPage = $pager->getCurrentPage(); +$prevPage = $pager->getPrevPage(); +$firsPage = $pager->getFirstPage(); +$nextPage = $pager->getNextPage(); +$lastPage = $pager->getLastPage(); +$articleLink = rex_article::getCurrent()->getUrl(); +?> + + + +getPageCount() > 1) : $page = 0 ?> + + \ No newline at end of file diff --git a/lang/de_de.lang b/lang/de_de.lang index e3b5079..bc86aa4 100644 --- a/lang/de_de.lang +++ b/lang/de_de.lang @@ -80,6 +80,7 @@ neues_author_be_user_id = REDAXO-Benutzer:in neues_docs_a_intro = Einleitung neues_docs_b_import_export = Import/Export neues_docs_c_migration = Migration +neues_docs_d_example = Beispiel neues_docs_settings = Einstellungen neues_docs_neues_entry = Einträge neues_docs_neues_category = Kategorien diff --git a/lang/en_gb.lang b/lang/en_gb.lang index 448366b..f4d02ec 100644 --- a/lang/en_gb.lang +++ b/lang/en_gb.lang @@ -79,6 +79,7 @@ neues_author_be_user_id = REDAXO User neues_docs_a_intro = Introduction neues_docs_b_import_export = Import/Export neues_docs_c_migration = Migration +neues_docs_d_example = Example neues_docs_settings = Settings neues_docs_neues_entry = Entries neues_docs_neues_category = Categories diff --git a/lib/neues.php b/lib/neues.php index 8b8b866..66cfe7a 100644 --- a/lib/neues.php +++ b/lib/neues.php @@ -1,3 +1,49 @@ orderBy('publishdate', 'desc'); + $pager = new rex_pager($rowsPerPage, $pageCursor); + $posts = $query->paginate($pager); + + $fragment = new rex_fragment(); + $fragment->setVar('posts', $posts); + $fragment->setVar('pager', $pager); + return $fragment->parse('neues/list.php'); + } + + /** + * Gibt einen einzelnen Eintrag zurück. + * Der Output wird über ein Fragment erzeugt, diese können nach Belieben angepasst werden. + * Die Beispiel-Fragmente bauen auf Bootstrap 5 auf. + * + * @param int $postId ID des Eintrags + * @return string HTML des Eintrags + * + * Beispiel / Example: + * echo neues::getEntry(2); + */ + public static function getEntry(int $postId): string + { + $post = neues_entry::get($postId); + $fragment = new rex_fragment(); + $fragment->setVar('post', $post); + return $fragment->parse('neues/entry.php'); + } +} diff --git a/lib/neues_entry.php b/lib/neues_entry.php index 4c3b168..b62ea99 100644 --- a/lib/neues_entry.php +++ b/lib/neues_entry.php @@ -58,8 +58,8 @@ public function setName(string $name): self */ public function getAuthor(): ?neues_author { - if ($this->getRelatedDataset('author')) { - return neues_author::get($this->getRelatedDataset('author')->getId()); + if ($this->getRelatedDataset('author_id')) { + return neues_author::get($this->getRelatedDataset('author_id')->getId()); } return null; }