# Extending
# Models
All models are defined in the Rapidez config:
'models' => [
'page' => Rapidez\Core\Models\Page::class,
'attribute' => Rapidez\Core\Models\Attribute::class,
'product' => Rapidez\Core\Models\Product::class,
...
]
To overwrite a model just create one, for example: app/Models/Product.php
and extend the Rapidez model:
<?php
namespace App\Models;
use Rapidez\Core\Models\Product as BaseProduct;
class Product extends BaseProduct {
//
}
Then change it in the configuration file:
'models' => [
...
'product' => App\Models\Product::class,
...
]
# Controllers
All controllers are defined in the Rapidez config:
'controllers' => [
'page' => Rapidez\Core\Http\Controllers\PageController::class,
'product' => Rapidez\Core\Http\Controllers\ProductController::class,
'category' => Rapidez\Core\Http\Controllers\CategoryController::class,
],
Create your own, for example: app/Controllers/Product.php
, make sure you implement the methods as defined in the controller in the core and define it in the configuration as with models.
# Widgets
Magento widgets can be defined in the Rapidez config:
'widgets' => [
'Magento\Cms\Block\Widget\Block' => Rapidez\Core\Widgets\Block::class,
'Magento\CatalogWidget\Block\Product\ProductsList' => Rapidez\Core\Widgets\ProductList::class,
],
They're rendered with the widget directive. You can implement additional widgets by adding them to the configuration and creating a class. All parameters will be added to the constructor and a render()
method should return the output. Have a look at the existing widgets (opens new window).
If the widget doesn't need any extra logic and just needs a view with the available parameters you can just specify the view name. All parameters will be available within the $options
variable.
'widgets' => [
...
'Your\Custom\Widget' => 'viewname',
],
Alternatives to Magento's CMS functionalities
Have a look at the CMS packages!
# Routes
You can add any additional routes just "the Laravel way", check out the Laravel routing docs (opens new window). Additionally Rapidez adds a handy store_code
route middleware so you can create routes for specify stores:
Route::middleware('store_code:YOUR_STORE_CODE')->get('customroute', function () {
//
});
Alternatively you can create a custom routes file if you've multiple routes specific for a store within your RouteServiceProvider
Route::middleware(['web', 'store_code:YOUR_STORE_CODE'])
->group(base_path('routes/YOUR_STORE_CODE.php'));
# Autocomplete
The autocomplete can contain as many ElasticSearch indexes as you wish. You can add these in the frontend.php
config file. For example:
'autocomplete' => [
'additionals' => [
'categories' => ['name^3', 'description'],
'blogs' => [
'fields' => ['title', 'tags'],
'size' => 3,
'sort' => ['date' => 'desc'] // See: https://www.elastic.co/guide/en/elasticsearch/reference/7.17/sort-search-results.html
],
],
'debounce' => 500,
'size' => 10,
],
You can use categories.blade.php
as an example for how to display new indexes properly in the autocomplete.