Bot telegram dengan Yii2

Februari 7, 2017

ok langsung aja yaa , kita gunakan Api telegram disini https://core.telegram.org/  untuk bisa mengakses api nya, kita membutuhkan botfather layaknya CS dia akan kasih token yang sebelumnya kita membuat akun bot terlebih dulu dari botfather bisa dicek disini https://rubahmania.wordpress.com/2017/01/31/bot-telegram-dengan-foxpro/ . naa untuk di Yii saya gunakan yii2 basic, saya copas dari sini http://cintaprogramming.com/2015/07/18/membuat-bot-telegram/ terus saya sesuaikan dengan yii menggunakan httpclient dan membuat controller yang saya taruh dibawah folder commands


<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/

namespace app\commands;
use Yii;
use yii\console\Controller;
use app\models\Yiibot;
use yii\data\ActiveDataProvider;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use yii\httpclient\Client;
/**
* This command echoes the first argument that you have entered.
*
* This command is provided as an example for you to learn how to create console commands.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class YiibotController extends Controller
{
/**
* This command echoes what you have entered as the message.
* @param string $message the message to be echoed.
*/
public function actionIndex()
{
while (true) {
$this->processOne();
}
}

protected function requesturl($method)
{
// $method = $method;
return 'https://api.telegram.org/bot'.Yii::$app->params['token'].'/'.$method;
}

protected function getUpdates($offset)
{
$url = $this->requesturl("getUpdates")."?offset=".$offset;
$resp = file_get_contents($url);
$result = json_decode($resp, true);
if ($result["ok"]==1)
return $result["result"];
return [];
}

protected function sendReply($chatid, $msgid, $text)
{
$data = [
'chat_id' => $chatid,
'text' => $text,
'reply_to_message_id' => $msgid

];

$client = new Client();
$response = $client->createRequest()
->setMethod('post')
->setUrl($this->requesturl('sendMessage'))
->addHeaders([
'content-type' => 'application/x-www-form-urlencoded',

])
->setData($data)
->send();
if ($response->isOk) {

$result= $response->content;
}

print_r($result);
}

protected function createResponse($text)
{
return "definisi " . $text;
}


protected function processMessage($message)
{
$updateid = $message["update_id"];
$message_data = $message["message"];
if (isset($message_data["text"])) {
$chatid = $message_data["chat"]["id"];
$message_id = $message_data["message_id"];
$text = $message_data["text"];
$response = $this->createresponse($text);
$this->sendreply($chatid, $message_id, $response);
}
return $updateid;
}


protected function processOne()
{
$update_id = 0;

if (file_exists("last_update_id")) {
$update_id = (int)file_get_contents("last_update_id");
}

$updates = $this->getupdates($update_id);

foreach ($updates as $message)
{
$update_id = $this->processmessage($message);
}
file_put_contents("last_update_id", $update_id + 1);
}
}

selanjutkan , buka command line (cmd) masuk kedalam folder rootnya

capture

akan jalan terus,kemudian chat deh bot telegram yang dibuat 🙂


Preview Image Sebelum Upload Image Ke Database

Oktober 14, 2016

langsung aja nih 🙂 hemat kouta,bikin input filenya,


<input id="selectedFile" type="file" class="btn btn-primary btn-block" style="display: none;"name="foto" onchange="uploadImage(this)" data-target="#aImgShow" />
<a href="#" class="btn btn-primary btn-block" onclick="document.getElementById('selectedFile').click();"><b>Upload Foto</b></a>

dan ini js nya


var imageTypes = ['jpeg', 'jpg', 'png']; //Validate the images to show
function showImage(src, target)
{
var fr = new FileReader();
fr.onload = function(e)
{
target.src = this.result;
};
fr.readAsDataURL(src.files[0]);

}

var uploadImage = function(obj)
{
var val = obj.value;
var lastInd = val.lastIndexOf('.');
var ext = val.slice(lastInd + 1, val.length);
if (imageTypes.indexOf(ext) !== -1)
{
var id = $(obj).data('target');
var src = obj;
var target = $(id)[0];
showImage(src, target);
}
else
{

}
}

OK moga sukses kawan (y)

 


[Yii 2]Menampilkan dan Input tanggal ke Mysql

Oktober 11, 2016

OK langsung aja yaa, naa biasanya klo mau menginputkan tanggal di mysql format standar mysql adalah yyyy-mm-dd , sedangkan inputan kita tanggal di halaman web formatnya dd-mm-yyyy , dan juga biasanya kalau menampilkan tanggal dari database yang muncul formatnya yyyy-mm-dd bukan dd-mm-yyyy, maka dari itu kita harus mengubahnya di model , berikut sintaxnya


public function afterFind ()
{
// Tampil dengan format DMY
$this->tanggal = strtotime ($this->tanggal);
$this->tanggal = date ('d-m-Y', $this->tanggal);

parent::afterFind ();
}

public function beforeValidate ()
{
// simpan dengan format YMD
$this->tanggal = strtotime ($this->tanggal);
$this->tanggal = date ('Y-m-d', $this->tanggal);

return parent::beforeValidate ();
}

Ok tarus sintak itu di model yang ada field tanggalnya 🙂 ok mg sukses selalu buat kalian 🙂


[Yii 2]Menggunakan SwitchInput dalam Gridview

Oktober 9, 2016

OK langsung aja, sesuai judul kita masukkan switchinput dalam grid ,sebelumnya install dulu nih swithcnya saya gunakan dari kartik ini linknya https://github.com/kartik-v/yii2-widget-switchinput terus instal lagi grid dari kartik 😀 https://github.com/kartik-v/yii2-grid , OK selesai tu

selanjutnya bikin generate deh pake Gii, langsung aja nih

+ View


use kartik\switchinput\SwitchInput;
use kartik\grid\GridView;

...

...

...

GridView::widget([

..

..

..

'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'attribute'=>'nilai',
'value'=> function ($model){

$var = -1;
$status = $model['ket'];
return SwitchInput::widget([
'name' => 'selected',
'value' => $model['nid'],
'tristate' => true,
'indeterminateValue' => -1,
'items' => SwitchInput::CHECKBOX ,
'pluginOptions' => [
'onText' => 'Lulus',
'offText' => 'Gagal',
]
]);

},
'format' => 'raw'
],

..

..

..

capture

naa selanjutnya bagaimana mengambil nilai dari switch itu, berikut sintaxnya,

tambahkan di dalam view (bisa di atasnya


$this->registerJs('

$(document).ready(function(){
$(\'#Button\').click(function(){
var selected = [];
$.each($("input[name=\'selected\']:checked"), function(){
selected.push($(this).val());
});
$.ajax({
type: \'POST\',
url : \'pilih\',
data : {row_id: selected},

});

});
});', \yii\web\View::POS_READY);

<input type="button" class="btn btn-info" value="Kirim" id="Button" >

selanjutnya untuk controller


$pk = Yii::$app->request->post('row_id');

foreach ($pk as $key => $value)
{
$sql = "update pegawai set ket='T' WHERE nid = $value";
$query = Yii::$app->db->createCommand($sql)->execute();
}
return $this->redirect(['pegawai']);

udah selesai begitu aja, selamat belajar, maaf nubi berbagi 😀 , mg sukses selalu kawan

 


Membuat paging sederhana di Yii2 dengan DAO

Oktober 2, 2016

OK , yaa dengan DAO , hanya untuk mengingat pribadi aja sih, beberapa kali lupa, beberapa kali juga buka documentasi 😀 , semuanya ada di doc nya sih, langsung aja, hanya untuk nubi seperti saya aja 🙂 kasusnya saya ada bebearpa query yang menggunakan DAO untuk menampilkan data didalam gridview, naa di dalam controller, tepatnya (default) ada di actionIndex, saya gunakan sederhannya


$sql = {disini query sql};

$sqlcount = "select count(*) from .... ";

$count = Yii::$app->db->createCommand($sqlcount)->queryScalar();

$pagination = new \yii\data\Pagination(['totalCount' => $count]); //Buat Jumlah paging

$dataProvider = new \yii\data\SqlDataProvider([
'sql' => $sql,
'params' => [':thnbln' => $thnbln], //jika menggunakan parameter
'totalCount' => $count,
'pagination' => [
'pageSize' => 10, ], //jumlah record yang ditampilkan perpage
]);

return $this->render('index', [
'dataProvider' => $dataProvider,
'pagination'=>$pagination

]);

 

naa dalam view index.php


use yii\widgets\LinkPager;

...

...

<div id="custom-pagination">
<?=
LinkPager::widget([ 'pagination' => $pagination,]);
?>
</div>

udah selesai begitu aja master :D, mohon maaf jika ada salah 🙂 tolong perbaiki dan kasih saya saran yang terbaik 😀