Hi there!
I’m using Blade components a lot as they are amazing. I’ve done React before, and there’s one thing that I’m missing, how do I add a specific function to a component, and split out the value?
So for example, if you have a component product, you’ll pass all the props/values and you’ll have a populated product list using one |component/HTML, however, if you pass in a ‘created date’, you would need to create function, run the function and split it out as a ready made value ready to display.
How do I achieve this in Sage/blade?
This is my product component:
<?php
namespace App\View\Components;
use Roots\Acorn\View\Component;
class Product extends Component
{
public $message;
public $class;
public $permalink;
public $thumbnail;
public $alt;
public $title;
public $wineCountry;
public $createdDate;
public $yearOfOrigin;
public $alcohol;
public $size;
public $price;
public $salePrice;
public $regularPrice;
public $isOnSale;
public $test;
public $isNewProduct;
// function isNewProductFunction() {
// $newness_days = 30;
// $created = strtotime( $createdDate );
// if ( ( time() - ( 60 * 60 * 24 * $newness_days ) ) < $created ) {
// $isNewProduct = true;
// }
// }
public function __construct(
$message = null,
$product = null,
$class = null,
$permalink = null,
$thumbnail = null,
$alt = null,
$title = null,
$wineCountry = null,
$createdDate = null,
// $isNewProduct = null,
$yearOfOrigin = null,
$alcohol = null,
$size = null,
$price = null,
$salePrice = null,
$regularPrice = null,
$isOnSale = null,
$test = null
) {
$this->product = $product;
$this->message = $message;
$this->class = $class;
$this->permalink = $permalink;
$this->thumbnail = $thumbnail;
$this->alt = $alt;
$this->title = $title;
$this->wineCountry = $wineCountry;
$this->yearOfOrigin = $yearOfOrigin;
$this->alcohol = $alcohol;
$this->size = $size;
$this->createdDate = $createdDate;
// $this->isNewProduct =
$this->price = $price;
$this->salePrice = $salePrice;
$this->regularPrice = $regularPrice;
$this->isOnSale = $isOnSale;
$this->test = $test;
}
public function render()
{
return $this->view('components.product');
}
}