How do I create a node in cron job in drupal8? - cron

I need to create node once the cronjob runs in drupal 8.
I have trid this code. But not working.
function modulename_cron() {
$node = entity_create('node', array(
'title' => 'New Article',
'body' => 'Article body',
'type' => 'article',
));
$node->save();
}

Your code is also working...
But if you getting problem to create node then also try this code too.
You also use this code for node create in Drupal 8
$node = \Drupal\node\Entity\Node::create([
'type' => 'article',
'title' => 'New Article',
'body' => 'Article body',
]);
$node->save();

A better solution would be to use Drupal's entity.manager service:
// Get node storage.
$nodeStorage = \Drupal::service('entity.manager')->getStorage('node');
// Set node content.
$content = [
'type' => 'article',
'title' => 'title',
'body' => [
'value' => 'Lorem ipsum dolor sit amet...',
'format' => 'basic_html'
]
];
// Create a new node.
$node = $nodeStorage->create($content);
// Save the node.
$node->save();
https://github.com/BoldizArt/UsefulDrupal8Functions/blob/master/CreateNodeProgrammatically.php

Related

Stripe how to retrieve a Checkout Session's line items quantity?

Create payment Sessions :
$session = \Stripe\Checkout\Session::create([
'payment_method_types' => ['card'], //, 'fpx','alipay'
'line_items' => [[
'price_data' => [
'product_data' => [
'name' => "Topup USDT Wallet",
'images' => ["https://abc-uaha.co/uploads/site_logo/site_logo_20210321130054.png"],
'metadata' => [
'pro_id' => "USD".$_GET['price']/100
]
],
'unit_amount' => $_GET['price'],
'currency' => 'usd',
],
'quantity' => 1,
'description' => "Spartan Capital",
]],
'mode' => 'payment',
'success_url' => STRIPE_SUCCESS_URL.'?session_id={CHECKOUT_SESSION_ID}',
'cancel_url' => STRIPE_CANCEL_URL,
]);
Refer to this docs : https://stripe.com/docs/api/checkout/sessions/line_items
I tried retrieve quantity from session:
try {
$checkout_session = \Stripe\Checkout\Session::retrieve([
'id' =>$session_id,
'expand' => ['line_items'],
]);
}catch(Exception $e) {
$api_error = $e->getMessage();
}
$line_items = $session->line_items[0].quantity;
echo $line_items; //it shows nothing, how to make it output "1"?
line_items are no longer included by default when retrieving Checkout Sessions. To get them in your retrieve call, you need to expand the line_item property.
You have two syntax errors :
You're missing a layer and using dot notation instead of PHP arrow syntax. The 2nd error is using $session instead of $checkout_session. So it should be :
$quantity = $checkout_session->line_items->data[0]->quantity;

Laravel Livewire how to validate array data

I try to validate array when form submitted as
<input type="text" class="form-control" wire:model.lazy="data.name" placeholder="name">
//at livewire component class
$data = [
'name' => 'someValue',
'phone' => 'someValue',
'email' => 'someValue'
]
I try this
Validator::make($this->data,[
'name' => 'required',
...
])->validate();
but not working, please help me.
You can validate using the same syntax as you have used in wire:model:
$this->validate([
'data.name' => ['required'],
]);
I'm new using Livewire, Idk if this related to your question. But, since your question is on top in Google. Maybe this will help other people.
public function saveAdd()
{
$rules_state = [
'state_name' => 'required',
'state_email' => 'required',
];
$check_state = $this->inputsFormAddProduct;
foreach ($this->inputsFormAddProduct as $key => $value) {
$rules_state = array_merge($rules_state, [
'state_product.'.$value => 'required',
'state_qty.'.$value => 'required',
]);
}
$validatedData = $this->validate($rules_state,
[
'required' => 'The :attribute cannot be empty.',
],
);
dd($rules_state);
}

Yii2- How to add a search box in grid view

I am new to Yii-2.
I have a grid-view in my index page which some entries are displaying.
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
//'meter_id',
[
'label' => 'Meter MSN',
'value' => function ($d) {
return $d->meter->meter_msn;
},
// 'filter' => Html::activeDropDownList($searchModel, 'meter_id', \app\models\Meters::toArrayList(), ['prompt' => "All Meters", 'class' => 'form-control']),
],
'imsi',
'telecom',
'status',
[
'label' => 'Created By',
'value' => function ($data) {
if (is_object($data))
return $data->created->name;
return ' - ';
},
//'filter' => Html::activeDropDownList($searchModel, 'created_by', \app\models\User::toArrayList(), ['prompt' => "Created By", 'class' => 'form-control']),
],
'comments',
'historic',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
Now I want to add a search-box against Meter MSN. In above code the filter is hidden so it was working but I don't want to add a drop-down instead I want a search box.
Below is my search class
public function search($params)
{
$query = MetersInventoryStore::find();
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
'meter_id' => $this->meter_id,
'created_by' => $this->created_by,
'updated_by' => $this->updated_by,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'store_id' => $this->store_id,
'meter_serial'=>$this->meter_serial,
// 'historic' => $this->historic,
'status'=>'SIM Installed',
])
// ->orFilterWhere(['status'=>'Communication Failed'])
;
// $query->andFilterWhere(['like', 'meter_serial', $this->meter_serial])
// ->andFilterWhere(['like','meter_id',$this->meter_id]);
$query->orderBy(['id' => SORT_DESC]);
return $dataProvider;
}
How can I place a search-box in it? As the simple search class will set up the search functionality by default. But my MSN value is coming from a function so I have no idea how can I place a search-box.
Any help would be highly appreciated.
for add filter field in a calculated column you should add a pubblic var in
in your search model
public function search($params)
{
public $your_column;
// declare as safe
public function rules()
{
return [
...
[[ 'your_column', ], 'safe'],
];
}
$query = MetersInventoryStore::find();
and then refer to your_column in grid_view
...
'columns' => [
['class' => 'yii\grid\SerialColumn'],
//'meter_id',
[
'attribute' => 'your_column',
'label' => 'Meter MSN',
'value' => function ($d) {
return $d->meter->meter_msn;
},
],
And last your searchModel you must expand your filter condition for manage properly your calculated column based on the filter value you passed.
You can find some sample in this tutorial http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

How Kohana implement sessions saved to database?

the source code hands Session_Cookie and Session_Native class but the Session_Database,
here the config file
<?php defined('SYSPATH') or die('No direct script access.');
return array(
'database' => array(
'database' => array(
'name' => 'blog_session_cookie',
'encrypted' => TRUE,
'lifetime' => 43200,
'group' => 'default',
'table' => 'sessions',
'columns' => array(
'session_id' => 'session_id',
'last_active' => 'last_active',
'contents' => 'contents'
),
'gc' => 500,
),
),
);
usage
$session = Session::Instance("Database");
$session->set('username', 'far');
great, its added a column in database, amusing! How the core do that?
thank you.
It's handled by Session_Database class in Database module
See the source: https://github.com/kohana/database/blob/3.2/master/classes/kohana/session/database.php
To implement database session mechanism there is Auth_ORM class in Kohana 3.2.

CakePHP Search plugin search in many fields

I'm using CakePHP search plugin http://cakedc.com/downloads/view/cakephp_search_plugin and want to make an arg to search multiple fields I have the array filterArgs as follows
var $filterArgs = array(
array('name' => 'search', 'type' => 'like', 'field' => 'Interview.title_en'),
);
I want the search arg to search not only the field Interview.title_en but to search also another field I tried something like
var $filterArgs = array(
array('name' => 'search', 'type' => 'like', 'field' => array('Interview.title_en', 'Interview.Desc'));
but It doesn't work!!
Any suggestions?
In order to achieve this, you have to create a simple method in your model which builds the 'OR' conditions for searching the fields.
public $filterArgs = array(
array('name' => 'q', 'type' => 'query', 'method' => 'filterQuery'),
);
public function filterQuery($data = array()) {
if(empty($data['q'])) { // q is the name of my search field
return array();
}
$query = '%'.$data['q'].'%';
return array(
'OR' => array(
'Model.title LIKE' => $query,
'Model.description LIKE' => $query,
'Model.resources LIKE' => $query,
)
);
}

Resources