To install and use the package in your laravel project, follow the steps below:
-
In your project's
composer.json
add the following code:"repositories": [ { "type": "vcs", "url": "https://github.com/clarity-tech/cms-base" } ]
-
Require the package via Composer:
composer require clarity-tech/cms
-
Run the migrations:
php artisan migrate
If you wish to publish config, migrations etc.
-
Publish the package configuration:
php artisan vendor:publish --provider="ClarityTech\Cms\CmsServiceProvider" --tag="cms.config"
-
Publish the package migrations:
php artisan vendor:publish --provider="ClarityTech\Cms\CmsServiceProvider" --tag="cms.migrations"
If you wish to use filament admin panel, add the following codes in your project's admin panel provider:
use ClarityTech\Cms\Filament\Admin\Resources\ContentResource;
use ClarityTech\Cms\Filament\Admin\Resources\TaxonomyResource;
use ClarityTech\Cms\Filament\Admin\Resources\CommentResource;
// $panel
->resources([
ContentResource::class,
TaxonomyResource::class,
CommentResource::class
])
You can change the cms.php
file in config directory:
middlewares
: Add middlewares as per your need.features
: Enable or disable features - API and Filament admin panel.routes
: Customize route path by modifying prefix.models
: You can have your own models and use those.actions
: You can add your own actions as well.taxonomy_types
: You decide what taxonomy types you want to have.
To create a new piece of content programmatically:
use ClarityTech\Cms\Contracts\CreatesContents;
use ClarityTech\Cms\DataTransferObjects\ContentData;
$data = new ContentData([
'title' => 'Sample Title',
'slug' => 'sample-slug',
'excerpt' => 'Sample Excerpt',
'content' => 'Sample Content',
'meta_tags' => ['tag1', 'tag2'],
'custom_properties' => ['key' => 'value'],
'order_column' => 1,
'type' => 'article',
'layout' => 'single',
'created_by' => 1,
'updated_by' => null,
'deleted_by' => null,
'published_at' => now(),
]);
app(CreatesContents::class)->create($data);
use ClarityTech\Cms\Contracts\UpdatesContents;
use ClarityTech\Cms\DataTransferObjects\ContentData;
$data = new ContentData([
'title' => 'Sample Title Updated',
'slug' => 'sample-slug-updated',
'excerpt' => 'Sample Excerpt',
'content' => 'Sample Content',
'meta_tags' => ['tag1', 'tag2'],
'custom_properties' => ['key' => 'value'],
'order_column' => 1,
'type' => 'article',
'layout' => 'single',
'updated_by' => 1,
'deleted_by' => null,
'published_at' => now(),
]);
app(UpdatesContents::class)->update($id, $data);
The package provides RESTful API endpoint for getting contents.
-
List all contents
GET /api/cms/contents
-
List specific content
GET /api/cms/contents/{slug}
The package provides RESTful API endpoints for comments.
-
Create a new comment
POST /api/cms/contents/sample-title/comments
Body:
{ "user_id": 1, "comment": "This is a test comment", "commentable_type": "ClarityTech\\Cms\\Models\\Content", "commentable_id": 1, "ip": "192.168.1.1", "is_approved": 1 }
Success response:
201 Created
{ "user_id": 1, "comment": "This is a test comment", "commentable_type": "ClarityTech\\Cms\\Models\\Content", "commentable_id": 1, "ip": "192.168.1.1", "is_approved": true, "updated_at": "2024-08-22T12:44:03.000000Z", "created_at": "2024-08-22T12:44:03.000000Z", "id": 3 }
-
List all comments for a specific content
GET /api/cms/contents/{slug}/comments
Success response:
200 Ok
{ "data": [ { "id": 1, "user_id": 1, "ip": null, "is_approved": true, "comment": "This is a test comment", "created_at": "2024-08-20T18:31:57.000000Z", "updated_at": "2024-08-21T20:14:04.000000Z", "deleted_at": null }, { "id": 2, "user_id": 1, "ip": null, "is_approved": false, "comment": "Nice comment", "created_at": "2024-08-20T18:31:57.000000Z", "updated_at": "2024-08-21T20:20:03.000000Z", "deleted_at": null } ] }
-
Get a specific comment
GET /api/cms/comments/{id}
Success response:
200 Ok
{ "data": { "id": 1, "user_id": 1, "ip": null, "is_approved": true, "comment": "This is a test comment", "created_at": "2024-08-20T18:31:57.000000Z", "updated_at": "2024-08-21T20:14:04.000000Z", "deleted_at": null } }
-
Update a specific comment
PUT /api/cms/comments/{slug}
Body:
{ "comment": "Updated comment" }
Success response:
202 Accepted
{ "id": 1, "user_id": 1, "ip": null, "is_approved": true, "comment": "Updated comment", "commentable_type": "ClarityTech\\Cms\\Models\\Content", "commentable_id": 1, "created_at": "2024-08-20T18:31:57.000000Z", "updated_at": "2024-08-22T13:31:51.000000Z", "deleted_at": null }
-
Delete a specific comment
DELETE /api/cms/comments/{slug}
Success response:
204 No Content
If you have Filament installed, you can access and manage your contents, taxonomies etc through the Filament interface.
Just go to /admin
.
Please see the changelog for more information on what has changed recently.
composer test
Please see contributing.md for details and a todolist.
If you discover any security related issues, please email author@email.com instead of using the issue tracker.
MIT. Please see the license file for more information.