• Tidak ada hasil yang ditemukan

Proses Pengerjaan

Dalam dokumen Laporan Pengalaman Praktek Industri (1) (Halaman 33-72)

BAB II IMPLEMENTASI YII2 FRAMEWORK DALAM PEMBUATAN

B. Proses Pengerjaan

a. Proses Penginstalan

Website Informasi Bisnis ini dikerjakan menggunakan framework YII2. Untuk itu, maka perlu dilakukan penginstallan YII2 framework menggunakan composer. Composer adalah tools Dependency Manager untuk pemograman PHP yang bertujuan memudahkan pengintallan

aplikasi web berbasis PHP. Untuk mendownload composer, bisa di download di getcomposer.org/download. Selanjutnya, lakukan penginstallan YII2 framework sebagai berikut :

a. Buka command prompt

b. Masuk ke directory xampp, ketikkan cd c:\xampp\php pada command prompt

c. Lalu ketik

d. Update composer, ketikkan

e. Buat project baru dengan mengetikkan kode berikut :

f. Kemudian ketik

g. Lalu inisialisasi project dengan mengetikkan

php.exe -r

"readfile('https://getcomposer.org/installer');" | php.exe

php.exe composer.phar self-update

php.exe composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta3"

php.exe composer.phar createproject preferdist --stability=dev yiisoft/yii2-app

advanced ../htdocs/bisnis1

h. Lalu akan ada pilihan 0 untuk Development or 1 untuk Poduction, pilih 0 lalu enter , Lalu ada pertanyaan lagi , ketik yes

Gambar 3. Inisialisasi project

i. Project sudah terinstal. Untuk menguji , ketikkan localhost/bisnis1/backend/web pada browser , maka akan tampil sebagai berikut :

b. Directory Pada YII2 Framework

Ketika menginstall yii dengan advanced application template, maka kita akan menjumpai beberapa folder utama dan beberapa file, berikut ini penjelasan mengenai fungsi masing-masing folder :

a. backend – pengembangan web yang berhubungan dengan database dan sistem

b. common – common file untuk semua aplikasi. c. console – aplikasi console.

d. environments - konfigurasi environment

e. frontend - – pengembangan web yang berhubungan dengan disain tampilan

Penjelasan untuk beberapa file :

a. .gitignore berisi daftar direktori diabaikan oleh sistem versi git. Jika ada kode yang dibutuhkan, tapi ada di repository, tambahkan disini. b. composer.json – Penjelasan tentang konfigurasi composer

c. init – Inisialisasi script d. init.bat - same for Windows.

e. LICENSE.md – Info lisensi project

f. README.md – Informasi dasar tentang penginstallan g. requirements.php – Syarat-syarat untuk penginstallan yii h. yii - console application bootstrap.

Intinya, ada 3 aplikasi yaitu frontend, backend dan console.

1) Frontend adalah aplikasi web yang akan ditampilkan untuk end user. 2) Backend adalah aplikasi web yang berfungsi untuk administrator

dalam mengelola aplikasi frontend.

3) Console adalah aplikasi yang digunakan untuk cron jobs and low-level server management, serta digunakan selama deployment aplikasi dan menghandle migrations dan assets.

4) Folder common berisi file-file yang digunakan oleh lebih dari satu aplikasi, sebagai contoh global configuration seperti pengaturan koneksi

database, atau general model seperti model user.

c. Pembuatan Database

Database yang dibentuk adalah sebagai berikut:

Dengan nama database bisnis, diisikan tabel – tabel seperti berikut ini :

Nama Tabel Field

User id (int :11 primarykey)

username (varchar : 255) auth_key (varchar : 32) password_hash(varchar :255) password_reset_token(varchar :255) email (varchar :255) status (smallint : 6) created_at (int :11) updated_at (int :11)

Posting idPosting (int : 11 primarykey) judul (varchar :200) isi (text) tglPosting(datetime) foto (varchar :200) idKategori (int :11) slug (varchar :255)

Slider idSlider (int :11) primarykey judul (varchar :255)

foto (varchar :255)

Kategori idKategori (int :11)

Contact id_contact (int :11) primary key phone (int :11) nama (varchar :255) email (varchar :255) pesan (text) waktu (datetime)

Comment idComment (int :11 primary key) content (text)

status (int :15) create_time (int :11) uname (varchar :128) email (varchar : 128)

idPosting (int :11 foreign key)

d. Menghubungkan Database pada YII2

1) Buka pada folder common dan pilih folder config 2) Kemudian pilih main-local.php

3) Akan keluar script seperti berikut ini :

<?php return [ 'components' => [ 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=””', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail',

// send all mails to a file by default. You have to set

// 'useFileTransport' to false and configure a transport

// for the mailer to send real emails.

'useFileTransport' => true,

],

],

4) Pada script 'dsn' => 'mysql:host=localhost;dbname=””',ganti ‘””’ menjadi ‘bisnis’

e. Generating Code dengan Gii

1) Ketikkan pada kolom search

“localhost/bisnis/backend/web/index.php?r=gii”, klik enter

2) Kemudian akan masuk ke halaman Yii Code Generate seperti pada gambar di bawah ini

Gambar 7. Halaman Yii Code Generator

3) Lalu pilih model Generator, di sini kita akan diminta untuk memasukkan nama tabel yang akan kita generate contoh seperti gambar

Gambar 8. Model Generator pada posting

4) Lakukan hal tersebut pada nama – nama tabel yang kita buat. Kemudian di preview, setelah dipreview kemudian generate, jika sukses maka tampilannya akan menjadi seperti ini :

Kemudian ketika sudah selesai pada model generator, beralih ke CRUD Generator, lakukan hal yang sama pada tabel lain. Pada CRUD Generator Posting isi kolom seperti berikut ini :

o Model Class : common\models\Posting

o Search Model Class : backend\models\PostingSearch o Controller Class : backend\controllers\PostingController

Gambar 10.CRUD generator untuk Posting

5) Lalu klik preview, kemudian generate kembali. Jika selesai hasilnya seperti ini :

Gambar 11. CRUD Generator berhasil

6) Dan terakhir pada Controller Generator, lakukan juga pada semua tabel. Contoh controller generator untuk posting

Gambar 12. Melakukan generate pada Controller Generator

Gambar 13. Controller Generate berhasil

8) Ketika generate selesai, maka akan tampil pada menu submenu – submenu yang sudah dibuat pada database.

Gambar 14. Submenu

f. Menambah Template AdminLTE pada Halaman Admin

1) Pastikan komputer terhubung dengan internet, kemudian buka CMD ketikkan perintah berikut ini composer require

dmstr/yii2-adminlte-asset “2.*”

2) Setalah berhasil diinstall, masuk ke direktori pada backend/config/ main-local.php. Buka file main-local.php lalu tambahkan kode seperti dibawah ini, dan save :

Gambar 15. memasukkan template adminLTE pada main-local.php

3) Lalu coba lihat di WEB browsernya, localhost/bisnis/backend/web, lalu tekan enter. Maka hasilnya akan menjadi seperti ini

Gambar 16. tampilan AdminLTE pertama kali install

Pada template AdminLTE ini bisa dirubah warnanya sesuai keinginan kita. Buka pada vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/main.php. Pada body

classnya, skin awal saat penginstallan yaitu skin-blue seperti gambar : ,maka diubah menjadi skin-blue-light.

Gambar 17. Merubah Warna AdminLTE

Gambar 18. tampilan AdminLTE dengan warna yang berbeda

g. Implementasi YII2 Framework pada Backend

1. Menu Login

Pada menu login sudah ada secara otomatis disediakan oleh framework YII2. Karena tema pada backend sudah diterapkan template adminLTE maka tampilan pada menu login menjadi seperti ini

Gambar 19. Menu Login saat pertama kali menginstall YII2

Gambar 20. Menu Login setelah diterapkan tema adminLTE 2. Menu Home

Pada menu home admin disediakan submenu lainnya untuk mengisi informasi yang dibutuhkan pada web yang kita buat dan

mempermudah administrator dalam meng-update situs webnya. Contoh yang telah di buat submenunya beserta source codenya seperti berikut ini:

Gambar 21. Menu Home pada Halaman Admin

a) Posting

Pada posting disediakan menu untuk menambah halaman posting dan melihat apa saja daftar informasi dari posting tersebut

1) Create Posting

Gambar 23. Create Posting

Agar pada form posting terlihat rapi, maka setiap kolomnya disusun dengan cara buka file pada views - posting - _form.php, lalu menambahkan <div class = row> seperti script berikut ini:

<div class ="row">

<div class="col-xs-6 col-md-4"> <?= $form->field($model, 'judul')->textInput(['maxlength' => true]) ?> </div>

<div class="col-xs-6 col-md-4">

<?= $form->field($model, 'file')->fileInput() ?> </div>

<?= $form->field($model, 'idKategori')- >dropDownList(ArrayHelper::map(kategori::find()->all(), 'idKategori', 'namaKategori'), ['prompt' => 'Kategori Artikel']) ?></div>

Agar pada kolom isi bisa di rubah font dan ada tambahan toolbar serta pluginsnya, maka rubah widgetnya dengan TinyMce.

Gambar 24. Kolom isi yang Menggunakan Widget TinyMce

<div class="col-md-12"><?= $form->field($model,

'isi')->widget(TinyMce::className(), [ 'options' => ['rows' => 20], 'clientOptions' => [

'plugins' => [

"advlist autolink lists link charmap print preview anchor",

"searchreplace visualblocks code fullscreen",

"insertdatetime media table contextmenu paste"

],

'toolbar' => "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"

]

]);?></div> </div>

Lalu pada kolom file, diharuskan untuk mengunduh sebuah file, maka diperlukan button telusuri file dengan menggunakan file input. Buka file pada views – posting – _form.php. tambahkan script berikut ini:

<div class="col-xs-6 col-md-4"><?= $form->field($model, 'file')->fileInput() ?> </div>

Setelah itu buka file pada controllers – PostingControllers.php, masukkan script berikut :

$model->file =

UploadedFile::getInstance($model,'file'); if ($model->file){

$model->foto= $tgl.'.' .$model->file->extension;

>file->saveAs('uploads/posting/'. $model->foto);

Dalam mengupload file jangan lupa untuk membuat folder di dalam folder web dengan nama uploads.

Gambar 25. File Input dalam mnegupload file

Kemudian beralih ke kolom kategori , dimana pada kolom kategori yang berada pada tabel posting tersebut berelasi dengan tabel kategori. Semua informasi yang akan diinputkan dan dipost oleh administrator, disesuaikan dengan kategori bisnis yang telah disediakan. Maka pada kolom kategori menggunakan dropdown list, agar dapat menyesuaikan dalam kategori apakah bisnis yang akan diposting oleh administrator.

Gambar 26. Dropdown list pada kategori

<div class="col-xs-6 col-md-4">

<?= $form->field($model, 'idKategori')-

>dropDownList(ArrayHelper::map(kategori::find()->all(), 'idKategori', 'namaKategori'), ['prompt' => 'Kategori Artikel']) ?></div>

2. View Posting

Gambar 27. View Posting

Pada menu lihat posting, akan ditampilkan beberapa postingan yang telah ditambahkan oleh administrator. Postingan dapat diupdate, dihapus, dan dilihat (view) tampilannya. Untuk meng-update postingan, maka dibutuhkan source code berikut :

<?php

use yii\helpers\Html;

$this->title = 'Update Posting: ' . $model->idPosting;

$this->params['breadcrumbs'][] = ['label' => 'Postings', 'url' => ['index']];

$this->params['breadcrumbs'][] = ['label' => >idPosting, 'url' => ['view', 'id' => $model->idPosting]];

$this->params['breadcrumbs'][] = 'Update'; ?>

<div class="posting-update"> <div class="box box-info"> <div class="box-header">

<h4>Update Data Posting</h4>

<div class="box-tools pull-right">

<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i> </button> </div> </div> <div class="box-body"> <?= $this->render('_form', [ 'model' => $model, ]) ?> </div>

Kemudian buka pada controller postingan di controllers/PostingController.php, pada action updatenya masukkan source code berikut :

public function actionUpdate($id) {

$model = $this->findModel($id); $oldImg = $model->foto; if ($model->load(Yii::$app->request->post())) { $model->file = UploadedFile::getInstance($model, 'file'); if ($model->file){ $this->deleteImg($oldImg); $model->foto = $tgl. '.' . $model->file->extension; $model->save(); >file->saveAs('uploads/posting/' . $model->foto); return $this->redirect(['index']); }else{ $model->save(); } return $this->redirect(['index']); } else { return $this->render('update', [ 'model' => $model, ]);

} }

private function deleteImg($img){ $baseUrl =

Yii::getAlias('uploads/posting/'.$img); @unlink($baseUrl);

}

Tujuan memasukkan action updatenya agar data lama yang sudah tak diperlukan lagi otomatis akan terhapus, contohnya pada image ketika diupdate, image yang lama akan terhapus dan akan diganti dengan image yang baru. Sehingga folder yang akan menyimpan gambar tersebut tidak menyimpan gambar lama dan tidak memenuhi penyimpanan harddisk. b) Slider

1. Create Slider

Gambar 29. Create Slider

Pada slider akan ditampilkan image yang akan muncul pada bagian frontend web bisnis, dimana slider ini bertujuan untuk menampilkan gambar yang berhubungan dengan web bisnis yang terletak pada bagian atas halaman awal di frontend. Administrator bertugas untuk memasukkan gambar pada slidernya.

Untuk mencreate slider tersebut, Pada judul slider, menggunakan text input dan filenya menggunakan file input, berikut source codenya pada file di folder views/slider/_form.php : <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?> <?= $form->field($model, 'judul')->textInput(['maxlength' => true]) ?> <?= $form->field($model, 'file')->fileInput() ?> Kemudian ubah juga pada controllersnya di

SliderContorollers.php pada actionCreatenya: public function actionCreate()

{

if ($model->load(Yii::$app->request->post()) ) {

$imageName = $model->judul; //get upload file

$model->file =

UploadedFile::getInstance($model,'file'); if ($model->file){

$model->foto= $imageName.'.' .$model->file>extension;

$model->file->saveAs('uploads/slider/'. $model->foto);

//save the path in db colomn $model->save();

return $this->redirect(['view', 'id' => $model->idSlider]);

} else { $model->save();

return $this->redirect(['view', 'id' => $model->idSlider]); } } else { return $this->render('create', [ 'model' => $model, ]); } }

Kemudian buat folder untuk file imagenya di uploads/slider. 2. View Slider

Gambar 30. View Slider

Pada view slider menampilkan slider yang sudah dicreate, dan bisa update serta menghapus slider. Berikut source code untuk menampilkan slider pada slider/view.php :

<div class="slider-view">

<div class="box box-solid box-info"> <div class="box-header">

<h3 class="box-title">Detail Slider</h3>

<div class="box-tools pull-right"> <?= Html::a('<i class="fa fa-fw

fa-plus-square"></i>Create', ['create', 'id' => $model->idSlider], ['class' => 'btn

btn-primary']) ?>

<?= Html::a('<i class="fa fa-fw fa-pencil-square"></i>Update', ['update', 'id' => $model->idSlider], ['class' => 'btn

<?= Html::a('<i class="fa fa-fw fa-trash"></i>Delete', ['delete', 'id' => $model->idSlider], ['class' => 'btn btn-primary','data' => ['confirm' => 'Are you sure you want to delete this item?', 'method' => 'post',],]) ?>

<button class="btn btn-primary btn-sm" data-widget="collapse"><i class="fa fa-minus"></i></button> </div> </div> <div class="box-body"> <?= DetailView::widget([ 'model' => $model, 'attributes' => [ 'idSlider', 'judul', [ 'attribute'=>'foto', 'value'=> 'uploads/slider/'.$model->foto, 'format'=>['image',['width'=>'200','height'=>'200 ']],

], ], ]) ?> </div>

Kemudian untuk mengupdate dan menghapus slider, source codenya pada SliderController.php :

public function actionUpdate($id) { $model = $this->findModel($id); $oldImg = $model->foto; $imageName = $model->judul; if ($model->load(Yii::$app->request->post())) { $model->file = UploadedFile::getInstance($model, 'file'); if ($model->file){ $this->deleteImg($oldImg); $model->foto = $imageName. '.' . $model->file->extension; $model->save(); $model->file->saveAs('uploads/slider/'. $model->foto);

return $this->redirect(['index']); }else{ $model->save(); } return $this->redirect(['index']); } else { return $this->render('update', [ 'model' => $model, ]); } }

private function deleteImg($img){ $baseUrl =

Yii::getAlias('uploads/slider/'.$img); @unlink($baseUrl);

}

public function actionDelete($id) { $model=$this->findModel($id); $oldImg=$model->foto; $this->deleteImg($oldImg); $this->findModel($id)->delete(); return $this->redirect(['index']); }

c) Kategori

1. Create Kategori

Gambar 31. Create Kategori

Tabel kategori bertujuan untuk membagi jenis – jenis postingan bisnis berdasarkan kategorinya. Pada web bisnis ini kategorinya dibedakan menjadi fashion, food, IT, dan bisnis ekonomi. Source code untuk create kategori pada

kategori/_form.php: <div class="kategori-form"> <div class="box-body"> <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'idKategori')->textInput() ?> <?= $form->field($model, 'namaKategori')->textInput(['maxlength' => true]) ?> <div class="form-group">

<?= Html::a('<i class="fa fa-fw fa-reply-all"></i>Back', ['index', 'id' =>

$model->idKategori], ['class' => 'btn btn-default']) ?> <?= Html::submitButton($model->isNewRecord ?

'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn success' : 'btn btn-primary']) ?> </div> <?php ActiveForm::end(); ?> </div> </div>

Kemudian pada KategoriController.php :

public function actionCreate() {

$model = new Kategori();

if ($model->load(Yii::$app->request->post()) && $model->save()) {

return $this->redirect(['view', 'id' => $model->idKategori]); } else { return $this->render('create', [ 'model' => $model, ]); } }

2. View Kategori

Gambar 32. View Kategori

Pada view kategori ada beberapa tombol seperti view, update, dan delete. Source codenya pada KategoriController.php adalah sebagai berikut :

public function actionView($id) {

return $this->render('view', [

'model' => $this->findModel($id), ]);

}

public function actionUpdate($id) {

$model = $this->findModel($id);

if ($model->load(Yii::$app->request->post()) && $model->save()) {

return $this->redirect(['view', 'id' => $model->idKategori]);

return $this->render('update', [ 'model' => $model,

]); }

}

public function actionDelete($id) { $this->findModel($id)->delete(); return $this->redirect(['index']); } d) Contact Gambar 33. Kontak 1. View Contact

Pada kontak kita hanya bisa melihat dan menghapus data kontak yang telah diinputkan oleh user pada frontend. Kontak juga tidak ditambahkan atau diinputkan oleh admin karena kontak digunakan untuk user yang ingin mengirim pesan atau kesan.

$this->title = $model->id_contact;

$this->params['breadcrumbs'][] = ['label' => 'Contacts', 'url' => ['index']];

$this->params['breadcrumbs'][] = $this->title; ?>

<div class="contact-view">

<div class="box box-solid box-primary"> <div class="box-header">

<h3 class="box-title">Detail Contact</h3>

<div class="box-tools pull-right">

<?= Html::a('<i class="fa fa-fw fa-trash"></i>Delete', ['delete', 'id' => $model->id_contact], [

'class' => 'btn btn-danger', 'data' => [

'confirm' => 'Are you sure you want to delete this item?',

'method' => 'post', ],

]) ?>

<button class="btn btn-primary btn-sm" data-widget="collapse"><i class="fa

fa-minus"></i></button> </div>

<div class="box-body"> <?= DetailView::widget([ 'model' => $model, 'attributes' => [ 'id_contact', 'phone', 'nama', 'email:email', 'pesan:ntext', 'waktu', ], ]) ?> </div> </div>

Gambar 34. Detail kontak e) Comment

1. View Comment

Pada backend komentar juga hanya bisa diview dan dihapus. Komentar bisa diinputkan pada bagian frontend.

Source code untuk menampilkan komentar :

Gambar 35. Detail komentar

$this->title = $model->idComment;

$this->params['breadcrumbs'][] = ['label' => 'Comments', 'url' => ['index']];

$this->params['breadcrumbs'][] = $this->title; ?>

<div class="comment-view">

<div class="box box-solid box-primary"> <div class="box-header">

<h3 class="box-title">Detail Comment</h3> <div class="box-tools pull-right">

<?= Html::a('<i class="fa fw

fa-trash"></i>Delete', ['delete', 'id' => $model->idComment], ['class' => 'btn btn-danger','data' => [

'confirm' => 'Are you sure you want to delete this item?',

], ]) ?>

<button class="btn btn-primary btn-sm" data-widget="collapse"><i class="fa

fa-minus"></i></button> </div> </div> <div class="box-body"> <?= DetailView::widget([ 'model' => $model, 'attributes' => [ 'idComment', 'content:ntext', 'status', 'create_time:datetime', 'uname', 'email:email', 'idPosting', ], ]) ?> <

59

BAB III

Dalam dokumen Laporan Pengalaman Praktek Industri (1) (Halaman 33-72)

Dokumen terkait