7 |
8 |
9 | {props.excerpt}
10 |├── .nvmrc ├── .gitignore ├── docs ├── .vuepress │ ├── style.styl │ ├── override.styl │ └── config.js ├── eel-helpers.md ├── how-tos.md ├── configuration.md ├── flowquery.md ├── nodetypes.md ├── index.md └── fusion-prototypes.md ├── Configuration ├── NodeTypes.Collection.PostContent.yaml ├── NodeTypes.Mixin.Limit.yaml ├── NodeTypes.Document.Category.yaml ├── NodeTypes.Mixin.Paginate.yaml ├── NodeTypes.Document.Tag.yaml ├── NodeTypes.Mixin.PublicationDate.yaml ├── NodeTypes.Mixin.SelectedPosts.yaml ├── NodeTypes.Mixin.RelatedPosts.yaml ├── NodeTypes.Mixin.SelectedCategories.yaml ├── NodeTypes.Mixin.Taggable.yaml ├── NodeTypes.Mixin.Excerpt.yaml ├── NodeTypes.Mixin.Categorisable.yaml ├── NodeTypes.Content.PostListing.yaml ├── NodeTypes.Mixin.Authorable.yaml ├── Settings.Neos.yaml ├── Settings.yaml ├── NodeTypes.Document.Post.yaml └── NodeTypes.Document.Author.yaml ├── Resources └── Private │ ├── Fusion │ ├── Helper │ │ └── ConvertToArray.fusion │ ├── Document │ │ ├── Tag.fusion │ │ ├── Author.fusion │ │ ├── Category.fusion │ │ └── Post.fusion │ ├── Component │ │ ├── PostList.fusion │ │ ├── PostContent.fusion │ │ ├── PostList.Item.fusion │ │ ├── CommentSection.fusion │ │ ├── PostList.Author.fusion │ │ ├── PostList.Tag.fusion │ │ └── PostList.Category.fusion │ ├── Root.fusion │ ├── Content │ │ └── PostListing.fusion │ └── Form │ │ └── BlogComment.fusion │ ├── Translations │ ├── en │ │ ├── NodeTypes │ │ │ ├── Collection │ │ │ │ └── PostContent.xlf │ │ │ ├── Document │ │ │ │ ├── CategoryBlog.xlf │ │ │ │ ├── Post.xlf │ │ │ │ ├── Tag.xlf │ │ │ │ └── Author.xlf │ │ │ ├── Mixin │ │ │ │ ├── Excerpt.xlf │ │ │ │ ├── Authorable.xlf │ │ │ │ ├── Limit.xlf │ │ │ │ ├── Paginate.xlf │ │ │ │ ├── RelatedPosts.xlf │ │ │ │ ├── SelectedPosts.xlf │ │ │ │ ├── PublicationDate.xlf │ │ │ │ ├── SelectedCategories.xlf │ │ │ │ ├── Taggable.xlf │ │ │ │ └── Categorisable.xlf │ │ │ └── Content │ │ │ │ └── PostListing.xlf │ │ ├── Form │ │ │ └── BlogComment.xlf │ │ └── Main.xlf │ └── de │ │ ├── NodeTypes │ │ ├── Collection │ │ │ └── PostContent.xlf │ │ ├── Document │ │ │ ├── CategoryBlog.xlf │ │ │ ├── Post.xlf │ │ │ ├── Tag.xlf │ │ │ └── Author.xlf │ │ ├── Mixin │ │ │ ├── Excerpt.xlf │ │ │ ├── Authorable.xlf │ │ │ ├── Paginate.xlf │ │ │ ├── Limit.xlf │ │ │ ├── RelatedPosts.xlf │ │ │ ├── SelectedPosts.xlf │ │ │ ├── SelectedCategories.xlf │ │ │ ├── PublicationDate.xlf │ │ │ ├── Taggable.xlf │ │ │ └── Categorisable.xlf │ │ └── Content │ │ │ └── PostListing.xlf │ │ ├── Form │ │ └── BlogComment.xlf │ │ └── Main.xlf │ └── Email │ └── comment_notification.html ├── .editorconfig ├── .github └── ISSUE_TEMPLATE │ └── bug_report.md ├── Classes ├── FlowQuery │ └── Operations │ │ ├── FilterByTagsOperation.php │ │ ├── FilterByCategoriesOperation.php │ │ ├── FilterByReferencesOperation.php │ │ └── FilterByAuthorOperation.php ├── Eel │ └── Helper │ │ └── BlogHelper.php ├── Package.php ├── DataSource │ └── UserDataSource.php ├── NodeCreationHandler │ └── AuthorNodeCreationHandler.php └── Service │ └── PostNodePreparationService.php ├── .travis.yml ├── package.json ├── .releaserc ├── LICENSE ├── composer.json ├── README.md └── CHANGELOG.md /.nvmrc: -------------------------------------------------------------------------------- 1 | 8.11.0 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .idea/ 3 | .vscode/ 4 | .DS_STORE 5 | -------------------------------------------------------------------------------- /docs/.vuepress/style.styl: -------------------------------------------------------------------------------- 1 | #app 2 | .content:not(.custom) 3 | max-width: 920px 4 | line-height: 1.6rem 5 | -------------------------------------------------------------------------------- /docs/.vuepress/override.styl: -------------------------------------------------------------------------------- 1 | $neos-light-blue = #00adee 2 | $accentColor = $neos-light-blue 3 | $textColor = #2c3e50 4 | $codeBgColor = #282c34 5 | -------------------------------------------------------------------------------- /docs/eel-helpers.md: -------------------------------------------------------------------------------- 1 | # Eel Helpers 2 | 3 | ## Blog.getUserByIdentifier(*<user-identifier>*) 4 | For querying users, e.g. the author. 5 | 6 | ```fusion 7 | ${ Blog.getUserByIdentifier(q(blogPost).property('author')) } 8 | ``` -------------------------------------------------------------------------------- /Configuration/NodeTypes.Collection.PostContent.yaml: -------------------------------------------------------------------------------- 1 | 'Breadlesscode.Blog:Collection.PostContent': 2 | superTypes: 3 | 'Neos.Neos:ContentCollection': true 4 | label: '${ I18n.translate(node.nodeType.label) }' 5 | ui: 6 | icon: 'icon-folder-open' 7 | label: 'i18n' 8 | -------------------------------------------------------------------------------- /Resources/Private/Fusion/Helper/ConvertToArray.fusion: -------------------------------------------------------------------------------- 1 | prototype(Breadlesscode.Blog:Helper.ConvertToArray) < prototype(Neos.Fusion:Value) { 2 | value = ${ value } 3 | value.@process{ 4 | convertToArray = ${ [ value ] } 5 | convertToArray.@if.isNoArray = ${ Type.isArray(value) } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Configuration/NodeTypes.Mixin.Limit.yaml: -------------------------------------------------------------------------------- 1 | 'Breadlesscode.Blog:Mixin.Limit': 2 | abstract: true 3 | properties: 4 | limit: 5 | type: integer 6 | defaultValue: 15 7 | ui: 8 | label: 'i18n' 9 | reloadIfChanged: true 10 | inspector: 11 | group: 'blogPost' 12 | -------------------------------------------------------------------------------- /Configuration/NodeTypes.Document.Category.yaml: -------------------------------------------------------------------------------- 1 | # I wish I could name it category, but there is a fusion bug… 2 | 'Breadlesscode.Blog:Document.CategoryBlog': 3 | superTypes: 4 | 'Neos.Neos:Document': true 5 | ui: 6 | label: 'i18n' 7 | position: 300 8 | group: 'blog' 9 | icon: 'folder-open-o' 10 | -------------------------------------------------------------------------------- /Configuration/NodeTypes.Mixin.Paginate.yaml: -------------------------------------------------------------------------------- 1 | 'Breadlesscode.Blog:Mixin.Paginate': 2 | abstract: true 3 | properties: 4 | isPaginated: 5 | type: boolean 6 | defaultValue: false 7 | ui: 8 | label: 'i18n' 9 | reloadIfChanged: true 10 | inspector: 11 | group: 'blogPost' 12 | -------------------------------------------------------------------------------- /Resources/Private/Fusion/Document/Tag.fusion: -------------------------------------------------------------------------------- 1 | prototype(Breadlesscode.Blog:Document.Tag) > 2 | prototype(Breadlesscode.Blog:Document.Tag) < prototype(Neos.Neos:Page) { 3 | body > 4 | body = afx` 5 |
{props.excerpt}
10 |' + value + '
' } 24 | } 25 | 26 | @if.hasMessage = ${ Configuration.setting('Breadlesscode.Blog.comments.confirmation.message') } 27 | @position = 'before addComment' 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Neos Blog 2 | 3 | [](https://packagist.org/packages/breadlesscode/neos-blog) 4 | [](https://packagist.org/packages/breadlesscode/neos-blog) 5 | [](https://packagist.org/packages/breadlesscode/neos-blog) 6 | [](https://github.com/semantic-release/semantic-release) 7 | [](https://github.com/breadlesscode/neos-blog/stargazers) 8 | [](https://github.com/breadlesscode/neos-blog/subscription) 9 | 10 | This Neos CMS plugin is for a simple blog functionality. 11 | 12 | ## Features 13 | - Categories 14 | - Tags 15 | - Comments 16 | - Author page 17 | - Listing with pagination 18 | 19 | ## Installation 20 | Most of the time you have to make small adjustments to a package (e.g. the configuration in Settings.yaml). Because of that, it is important to add the corresponding package to the composer from your theme package. Mostly this is the site package located under Packages/Sites/. To install it correctly go to your theme package (e.g.Packages/Sites/Foo.Bar) and run following command: 21 | 22 | ```bash 23 | composer require breadlesscode/neos-blog --no-update 24 | ``` 25 | 26 | The --no-update command prevent the automatic update of the dependencies. After the package was added to your theme composer.json, go back to the root of the Neos installation and run composer update. Your desired package is now installed correctly. 27 | -------------------------------------------------------------------------------- /Classes/NodeCreationHandler/AuthorNodeCreationHandler.php: -------------------------------------------------------------------------------- 1 | getNodeType()->isOfType(PostNodePreparationService::DOCUMENT_AUTHOR_TYPE)) { 47 | return; 48 | } 49 | /** @var User $user */ 50 | $user = $this->userRepo->findByIdentifier($data['user']); 51 | 52 | $node->setProperty('user', $data['user']); 53 | $node->setProperty('title', $user->getLabel()); 54 | $node->setProperty('uriPathSegment', $this->nodeUriPathSegmentGenerator->generateUriPathSegment($node, $user->getLabel())); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Classes/FlowQuery/Operations/FilterByReferencesOperation.php: -------------------------------------------------------------------------------- 1 | getContext(), $this->getReferenceFilter($arguments[0], $arguments[1])); 36 | $flowQuery->setContext($context); 37 | } 38 | 39 | /** 40 | * this method returns a closure which intersect references on a given property 41 | * 42 | * @param string $propertyName 43 | * @param array $references 44 | * @return \Closure 45 | */ 46 | public function getReferenceFilter(string $propertyName, array $references) 47 | { 48 | return function (NodeInterface $node) use ($propertyName, $references) { 49 | $nodeReferences = $node->getProperty($propertyName); 50 | 51 | if ($nodeReferences === null) { 52 | return false; 53 | } 54 | return count(array_intersect($nodeReferences, $references)) > 0; 55 | }; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Classes/FlowQuery/Operations/FilterByAuthorOperation.php: -------------------------------------------------------------------------------- 1 | isAuthorDocumentNode($arguments[0])) { 34 | throw new FlowQueryException('The first parameter of '.self::$shortName.' should be a string or a node of type '.self::AUTHOR_DOCUMENT_NODETYPE.'.'); 35 | } 36 | 37 | if ($arguments[0] instanceof NodeInterface) { 38 | $arguments[0] = $arguments[0]->getProperty('user'); 39 | } 40 | 41 | if ($arguments[0] === false || $arguments[0] === null || $arguments[0] === '') { 42 | return; 43 | } 44 | 45 | $context = \array_filter($flowQuery->getContext(), function (NodeInterface $node) use ($arguments) { 46 | return $node->getProperty('author') === $arguments[0]; 47 | }); 48 | 49 | $flowQuery->setContext($context); 50 | } 51 | 52 | /** 53 | * checks the given argument if its a author page 54 | * 55 | * @param mixed $node 56 | * @return boolean 57 | */ 58 | protected function isAuthorDocumentNode($node) 59 | { 60 | return ( 61 | $node instanceof NodeInterface && 62 | $node->getNodeType()->getName() === self::AUTHOR_DOCUMENT_NODETYPE 63 | ); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Neos Blog 2 | 3 | [](https://packagist.org/packages/breadlesscode/neos-blog) 4 | [](https://packagist.org/packages/breadlesscode/neos-blog) 5 | [](https://packagist.org/packages/breadlesscode/neos-blog) 6 | [](https://github.com/semantic-release/semantic-release) 7 | [](https://github.com/breadlesscode/neos-blog/stargazers) 8 | [](https://github.com/breadlesscode/neos-blog/subscription) 9 | 10 | This Neos CMS plugin is for a simple blog functionality. 11 | 12 | ## Features 13 | - Categories 14 | - Tags 15 | - Comments 16 | - Author page 17 | - Listing with pagination 18 | 19 | 20 | ## Installation 21 | Most of the time you have to make small adjustments to a package (e.g., the configuration in Settings.yaml). Because of that, it is important to add the corresponding package to the composer from your theme package. Mostly this is the site package located under Packages/Sites/. To install it correctly go to your theme package (e.g.Packages/Sites/Foo.Bar) and run following command: 22 | 23 | ```bash 24 | composer require breadlesscode/neos-blog --no-update 25 | ``` 26 | 27 | The --no-update command prevent the automatic update of the dependencies. After the package was added to your theme composer.json, go back to the root of the Neos installation and run composer update. Your desired package is now installed correctly. 28 | 29 | ## Documentation 30 | 31 | Documentation: https://breadlesscode.github.io/neos-blog 32 | 33 | ## Contribution 34 | 35 | We'd love you to contribute to neos-blog. We try to make it as easy as possible. 36 | We are using semantic-release to have more time to concentrate on important stuff 37 | instead of struggling in the dependency or release hell. 38 | 39 | Therefore the first rule is to follow the [eslint commit message guideline](https://github.com/conventional-changelog-archived-repos/conventional-changelog-eslint/blob/master/convention.md). 40 | It is really easy, when you always commit via `yarn commit`. Commitizen will guide you. 41 | 42 | All PRs will be merged into the master branch. Travis and semantic release will check the commit messages and start 43 | building a new release when the analysis of the latest commits will trigger that. 44 | 45 | If you have questions just ping us on twitter or github. 46 | 47 | 48 | ## License 49 | The MIT License (MIT). Please see [License File](LICENSE) for more information. 50 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [2.0.5](https://github.com/breadlesscode/neos-blog/compare/v2.0.4...v2.0.5) (2019-06-12) 2 | 3 | 4 | ### Fix 5 | 6 | * wired author page listing bug ([e460ddff1404f8151adabbd01c6e4a8ca484ecf8](https://github.com/breadlesscode/neos-blog/commit/e460ddff1404f8151adabbd01c6e4a8ca484ecf8)) 7 | 8 | ## [2.0.4](https://github.com/breadlesscode/neos-blog/compare/v2.0.3...v2.0.4) (2019-06-12) 9 | 10 | 11 | ### Fix 12 | 13 | * fxied silly array index error :confounded: ([6be8dbf55554ac00b1fc9abda3efe1d0c6c4ef6e](https://github.com/breadlesscode/neos-blog/commit/6be8dbf55554ac00b1fc9abda3efe1d0c6c4ef6e)) 14 | 15 | ## [2.0.3](https://github.com/breadlesscode/neos-blog/compare/v2.0.2...v2.0.3) (2019-06-12) 16 | 17 | 18 | ### Fix 19 | 20 | * filter helpers now accepts non array arguments ([292640e919af9314ca6ae5115fec570ab314cecb](https://github.com/breadlesscode/neos-blog/commit/292640e919af9314ca6ae5115fec570ab314cecb)), closes [#7](https://github.com/breadlesscode/neos-blog/issues/7) 21 | 22 | ## [2.0.1](https://github.com/breadlesscode/neos-blog/compare/v2.0.0...v2.0.1) (2019-04-10) 23 | 24 | 25 | ### Upgrade 26 | 27 | * Update commitizen ([d6e429d759197b40f44212b53efa87e249daa5e7](https://github.com/breadlesscode/neos-blog/commit/d6e429d759197b40f44212b53efa87e249daa5e7)) 28 | * Updating vuepress ([292cf4506f05988b33d415fcccf0845a0d58e342](https://github.com/breadlesscode/neos-blog/commit/292cf4506f05988b33d415fcccf0845a0d58e342)) 29 | * Upgrade semantic-release ([ba58f8f7b56e6a1468def6a0e48af18a96c47af0](https://github.com/breadlesscode/neos-blog/commit/ba58f8f7b56e6a1468def6a0e48af18a96c47af0)) 30 | 31 | ## [1.3.2](https://github.com/breadlesscode/neos-blog/compare/v1.3.1...v1.3.2) (2018-11-21) 32 | 33 | 34 | ### Fix 35 | 36 | * fixed exception on create new blog post ([725cb93ce21e10ed14368dda306cc70dcd2bafd5](https://github.com/breadlesscode/neos-blog/commit/725cb93ce21e10ed14368dda306cc70dcd2bafd5)) 37 | 38 | # [1.3.0](https://github.com/breadlesscode/neos-blog/compare/v1.2.0...v1.3.0) (2018-11-16) 39 | 40 | 41 | ### TASK 42 | 43 | * Update category-change on move of posts ([5e01140757e25b92f0912e8a5eb66be56e7f25f1](https://github.com/breadlesscode/neos-blog/commit/5e01140757e25b92f0912e8a5eb66be56e7f25f1)) 44 | 45 | ### Update 46 | 47 | * Update semantic-release packages to the latest version ([7528a4b886cbeddd9b0afc0a396fad8b6d30db7e](https://github.com/breadlesscode/neos-blog/commit/7528a4b886cbeddd9b0afc0a396fad8b6d30db7e)) 48 | 49 | # [1.2.0](https://github.com/breadlesscode/neos-blog/compare/v1.1.1...v1.2.0) (2018-10-11) 50 | 51 | 52 | ### Docs 53 | 54 | * Adjust badges ([72d11093f307b690d44b89cf687a49bdba87d992](https://github.com/breadlesscode/neos-blog/commit/72d11093f307b690d44b89cf687a49bdba87d992)) 55 | 56 | ### New 57 | 58 | * Use translated date formats ([7df3efd85ad3704b7d74b4717e45bf79328a9cc3](https://github.com/breadlesscode/neos-blog/commit/7df3efd85ad3704b7d74b4717e45bf79328a9cc3)), closes [#6](https://github.com/breadlesscode/neos-blog/issues/6) 59 | 60 | ## [1.1.1](https://github.com/breadlesscode/neos-blog/compare/v1.1.0...v1.1.1) (2018-09-29) 61 | 62 | 63 | ### Fix 64 | 65 | * Adjust travis configuration ([0cc294ef17b88e9ce4fb2cccc448ea05a2eaf0c3](https://github.com/breadlesscode/neos-blog/commit/0cc294ef17b88e9ce4fb2cccc448ea05a2eaf0c3)) 66 | * Create missing node config file ([bddbbe1983168e51f7bfe5fa758e57fc40d69c32](https://github.com/breadlesscode/neos-blog/commit/bddbbe1983168e51f7bfe5fa758e57fc40d69c32)) 67 | * Remove unneeded version number ([f7ff1db7254fbc87542129a750c1a65111bda355](https://github.com/breadlesscode/neos-blog/commit/f7ff1db7254fbc87542129a750c1a65111bda355)) 68 | -------------------------------------------------------------------------------- /Classes/Service/PostNodePreparationService.php: -------------------------------------------------------------------------------- 1 | getNodeType()->isOfType(self::DOCUMENT_POST_TYPE)) { 53 | return; 54 | } 55 | 56 | $this->setAuthorOfPostNodeToCurrentUser($node); 57 | $this->addParentCategoryToPostNode($node); 58 | } 59 | 60 | /** 61 | * this functions listens to the nodeMoved event 62 | * 63 | * @param NodeInterface $node 64 | * @throws \Neos\Eel\Exception 65 | */ 66 | public function beforeNodeMoved(NodeInterface $node) 67 | { 68 | if (!$node->getNodeType()->isOfType(self::DOCUMENT_POST_TYPE)) { 69 | return; 70 | } 71 | 72 | $this->removeParentCategoryFromPostNode($node); 73 | } 74 | 75 | /** 76 | * this functions listens to the nodeMoved event 77 | * 78 | * @param NodeInterface $node 79 | * @throws \Neos\Eel\Exception 80 | */ 81 | public function afterNodeMoved(NodeInterface $node) 82 | { 83 | if (!$node->getNodeType()->isOfType(self::DOCUMENT_POST_TYPE)) { 84 | return; 85 | } 86 | 87 | $this->addParentCategoryToPostNode($node); 88 | } 89 | 90 | /** 91 | * sets the current user label to the author property of the blog post node 92 | * 93 | * @param NodeInterface $node 94 | * @return void 95 | */ 96 | protected function setAuthorOfPostNodeToCurrentUser(NodeInterface $node) 97 | { 98 | $currentUser = $this->userDomainService->getCurrentUser(); 99 | $userIdentifier = $this->persistenceManager->getIdentifierByObject($currentUser); 100 | 101 | $node->setProperty('author', $userIdentifier); 102 | } 103 | 104 | /** 105 | * sets the parent category to the category property of the blog post node 106 | * 107 | * @param NodeInterface $node 108 | * @return void 109 | * @throws \Neos\Eel\Exception 110 | */ 111 | protected function removeParentCategoryFromPostNode(NodeInterface $node) 112 | { 113 | $parentCategory = (new FlowQuery([$node])) 114 | ->parent('[instanceof '. self::DOCUMENT_CATEGORY_TYPE .']') 115 | ->get(0); 116 | 117 | if ($parentCategory !== null) { 118 | $categories = $node->getProperty('categories'); 119 | $index = array_search($parentCategory, $categories, true); 120 | if ($index !== false) { 121 | array_splice($categories, $index, 1); 122 | $node->setProperty('categories', $categories); 123 | } 124 | } 125 | } 126 | 127 | /** 128 | * sets the parent category to the category property of the blog post node 129 | * 130 | * @param NodeInterface $node 131 | * @return void 132 | * @throws \Neos\Eel\Exception 133 | */ 134 | protected function addParentCategoryToPostNode(NodeInterface $node) 135 | { 136 | $parentCategory = (new FlowQuery([$node])) 137 | ->parent('[instanceof '. self::DOCUMENT_CATEGORY_TYPE .']') 138 | ->get(0); 139 | 140 | if ($parentCategory !== null) { 141 | $categories = $node->getProperty('categories') ?? []; 142 | if (array_search($parentCategory, $categories, true) === false) { 143 | $categories[] = $parentCategory; 144 | $node->setProperty('categories', $categories); 145 | } 146 | } 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /docs/fusion-prototypes.md: -------------------------------------------------------------------------------- 1 | # Fusion prototypes 2 | 3 | **Attention:** All Fusion prototypes are prefixed with `Breadlesscode.Blog:`. You can't use `Component.PostList` e.g. in your fusion code. You have to use `Breadlesscode.Blog:Component.PostList`. 4 | 5 | ## `Component.CommentSection` 6 | This prototype displays the comment form and the comments. 7 | 8 | ### Properties 9 | 10 | | Name | Default value | Description | 11 | | ------------ | ------------- | ----------- | 12 | | formPosition | `'top'` | Defines the position of the comment form. If it's set to `'top'` it's displayed on top of the comments. If the value is `'bottom'`, it's the other way round. | 13 | 14 | ## `Component.PostList` 15 | This prototype is for displaying all kind of post lists. 16 | 17 | ### Properties 18 | | Name | Default value | Description | 19 | | ------------ | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | 20 | | collection | `${ q(site).find('[instanceof Breadlesscode.Blog:Document.Post]').get() }` | Should contain all post items you want to display | 21 | | headline | `${q(documentNode).property('title')}` | Headline displayed on top of this list. Can be disabled by setting property to `false` | 22 | | itemsPerPage | `5` | Defines how many items/posts per page are shown | 23 | | paginated | `true` | List pagination flag, if is false, pagination is disabled | 24 | 25 | 26 | ## `Component.PostList.Author` 27 | This prototype is for displaying all kind of post lists. 28 | 29 | ### Properties 30 | | Name | Default value | Description | 31 | | ------------ | -------------------------------------- | -------------------------------------------------------------------------------------- | 32 | | author | `${ documentNode }` | Filters posts by author (user identifier) | 33 | | headline | `${q(documentNode).property('title')}` | Headline displayed on top of this list. Can be disabled by setting property to `false` | 34 | | itemsPerPage | `5` | Defines how many items/posts per page are shown | 35 | | paginated | `true` | List pagination flag, if is false, pagination is disabled | 36 | 37 | ## `Component.PostList.Category` 38 | This prototype is for displaying all kind of post lists. 39 | 40 | ### Properties 41 | | Name | Default value | Description | 42 | | ------------ | -------------------------------------- | ------------------------------------------------------------------------------------- | 43 | | category | `${ documentNode }` | Filters posts by one or more categories | 44 | | headline | `${q(documentNode).property('title')}` | Headline displayed ontop of this list. Can be disabled by setting property to `false` | 45 | | itemsPerPage | `5` | Defines how many items/posts per page are shown | 46 | | paginated | `true` | List pagination flag, if is false, pagination is disabled | 47 | 48 | ## `Component.PostList.Tag` 49 | This prototype is for displaying all kind of post lists. 50 | 51 | ### Properties 52 | | Name | Default value | Description | 53 | | ------------ | -------------------------------------- | -------------------------------------------------------------------------------------- | 54 | | tag | `${ documentNode }` | Filters posts by tag or tags | 55 | | headline | `${q(documentNode).property('title')}` | headline displayed on top of this list. Can be disabled by setting property to `false` | 56 | | itemsPerPage | `5` | Defines how many items/posts per page are shown | 57 | | paginated | `true` | List pagination flag, if is false, pagination is disabled | 58 | 59 | ## `Component.PostList.Item` 60 | This prototype represents one item in the post list. 61 | 62 | ### Properties 63 | | Name | Default value | Description | 64 | | ------------ | -------------------------------------- | -------------------------------------------------------------------------------------- | 65 | | excerpt | `${ q(item).property('excerpt') }` | This property is used for a small sub text under the listitem headline | 66 | | renderer | `${q(documentNode).property('title')}` | Here you can override the complete redering of a single list item | 67 | -------------------------------------------------------------------------------- /Resources/Private/Email/comment_notification.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 || 86 | |
87 |
88 |
91 |
134 |
|
135 | 136 | |