AdityaDees: aplikasi web

Hot

https://publishers.chitika.com/

Contact us for advertising.
Showing posts with label aplikasi web. Show all posts
Showing posts with label aplikasi web. Show all posts

08 February 2018

Membuat Aplikasi Berbasis Web "Single Page Application" dengan Vue.js (Bagian 1)

20:15 0

Javascript saat ini semakin populer digunakan dalam pengembangan aplikasi berbasis web baik di sisi client (browser) maupun server, yang semakin diperkuat dengan munculnya standar-standar ECMAScript terbaru seperti ECMAScript6 (ES6) atau biasa disebut juga ECMAScript 2015 (ES2015). Untuk lebih lengkapnya mengenai ES6 ini silahkan baca halaman web penjelasan dari Luke Hoban yang sangat bermanfaat ini. Sejarahnya dulu saya ingat Javascript ini adalah bahasa pemrograman client-side yang paling menyebalkan karena perbedaan standar setiap browser, aplikasi web kita berjalan lancar di Interner Explorer 5 atau 6, pas dijalankan dengan Mozilla, Netscape atau Firefox tidak jalan sama sekali dan juga berlaku sebaliknya, Mikocok ehhh maksud saya Microsoft cenderung membuat implementasi mereka sendiri. Seiring dengan semakin maraknya penggunaan aplikasi berbasis web, Javascript semakin banyak digunakan untuk membuat aplikasi web yang responsif dan "reaktif". Istilah "Reaktif" sedang "in" dalam pengembangan web saat ini, yang merujuk kepada kemampuan untuk "mereaktifkan" elemen DOM (Document Object Model)/tag HTML sehingga ketika diubah nilainya pada kode Javascript, maka secara otomatis tag HTML tersebut juga akan berubah, begitu juga sebaliknya apabila kita melalukan perubahan di sisi HTML, maka perubahan tersebut akan terefleksi pada kode Javascript. Beberapa framework/library Javascript yang memungkinkan kita membangun aplikasi web yang reaktif ini antara lain: AngularJS (bukan Angular), Backbone.js, Ember, React, Riot, Polymer, dan yang akan kita bahas kali ini adalah Vue.js yang menyatakan dirinya sebagai "The Progressive JavaScript Framework" (kayanya semua framework menyatakan diri mereka paling hebat dibandingkan dengan framework lain 😬).



Reaktifitas


Untuk melihat contoh "reaktifitas" dengan Vue, silahkan buat sebuah file HTML bernama index.html dan masukkan kode berikut:

index.html


<!doctype html>
<html lang="id">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<script src="assets/js/vue.min.js"></script>
<title>Contoh Reaktifitas</title>
</head>
<body>
<div id="spa">
<div class="jumbotron jumbotron-fluid p-3">
<h1 class="display-4 text-center">{{ teks_yang_reaktif?teks_yang_reaktif:'Hmmmm...' }}</h1>
<hr class="my-4"/>
<p class="lead text-center"><input type="text" class="form-control" v-model="teks_yang_reaktif"/></p>
</div>
<script>
var spa = new Vue({
el: '#spa',
data: {
teks_yang_reaktif: 'Sebuah Teks yang Reaktif!'
}
})
</script>
</body>
</html>



Buka file index.html ini pada browser dan kita akan melihat seperti berikut ini:




Single Page Application


Dengan munculnya library/framework reaktif seperti Vue.js ini mendorong model pengembangan aplikasi berbasis web "Single Page Application (SPA)", dimana semua "view" atau tampilan antar muka dibangun dengan hanya menggunakan sebuah file HTML yang kemudian akan me-load view komponen/modul lain dengan meng-injeksi (atau istilah kerennya: render) secara dinamis dengan Javascript. Dengan model SPA ini maka aplikasi di sisi server tidak lagi harus mengirimkan respon balik halaman HTML full, cukup data saja dalam format JSON (menggunakan AJAX) misalnya yang kemudian akan direaktifkan oleh Vue, setiap perubahan di sisi klien akan memicu perubahan pada server, begitu juga sebaliknya dan pada akhirnya komunikasi data antara client dengan server berlangsung lebih cepat karena ukuran data yang kecil. Kita lihat contoh sederhana dengan menggunakan Vue berikut ini:



index.html


<!doctype html>
<html lang="id">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<script src="assets/js/vue.min.js"></script>
<script src="assets/js/vue-router.min.js"></script>
<title>Single Page Application Vue.js</title>
</head>
<body>
<div id="spa"><!-- elemen root/utama dari SPA Vue -->
<!-- Navigasi utama aplikasi SPA
perhatikan tag "router-link" adalah tag khusus untuk membuat hyperlink ke router Vue -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<router-link class="navbar-brand" to="/">SPA Vue.js</router-link>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navigasi"
aria-controls="navigasi" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>

<div class="collapse navbar-collapse" id="navigasi">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<router-link class="nav-link" to="/">Home</router-link>
</li>
<li class="nav-item">
<router-link class="nav-link" to="/berita">Berita</router-link>
</li>
</ul>
</div>
</nav>

<!-- link dari "router-link" di atas akan merender view masing2 di dalam tag "router-view" -->
<div id="main-content">
<router-view></router-view>
</div>
</div>

<!-- template view untuk komponen "Home" -->
<script type="text/x-template" id="home">
<div class="jumbotron jumbotron-fluid"><h1 class="display-4 text-center">{{ judul }}</h1>
<hr class="my-4"/>
<p class="lead text-center">{{ konten }}</p>
</script>

<!-- template view untuk komponen "Berita" -->
<script type="text/x-template" id="berita">
<div>
<p class="p-1"><input type="text" class="form-control" v-model="keywords"
v-on:keyup="search"
placeholder="Masukkan kata kunci pencarian"></p>
<div v-if="berita_filtered.length>0">
<div class="berita p-2" v-for="b in berita_filtered">
<p class="h4">{{ b.judul }}</p>
<p class="lead">{{ b.konten }}</p>
<hr/>
</div>
</div>
<div v-else>
<div class="berita p-2" v-for="b in berita">
<p class="h4">{{ b.judul }}</p>
<p class="lead">{{ b.konten }}</p>
<hr/>
</div>
</div>
</div>
</script>

<!-- kode javascript untuk menjalankan Vue.js -->
<script src="assets/js/app.js"></script>
</body>
</html>


assets/js/app.js


// 1. Definisikan komponen Vue
// Komponen "Home" akan menampilkan halaman depan aplikasi
const Home = Vue.extend({
template: '#home',
data: function() {
return {
judul: 'Selamat datang di Single Page Application',
konten: 'Vue.js memungkinkan developer web membangun aplikasi web yang dinamis, ringan dan cepat.'
}
}
});
// Komponen "Berita" akan menampilkan daftar berita
var data_berita = {
keywords: '',
berita: [
{judul: 'Lorem Ipsum', konten: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur feugiat, eros quis semper dignissim, libero erat semper ante, non porttitor sem metus a neque.'},
{judul: 'In Vehicula Vulputate', konten: 'In vehicula vulputate eros vitae porttitor. Praesent commodo accumsan semper. Proin eu tellus purus, eu malesuada sapien.'},
{judul: 'Aliquam Laoreet Gravida Erat', konten: 'Aliquam laoreet gravida erat, in hendrerit arcu lobortis id. Cras libero augue, aliquam nec sollicitudin id, molestie eu ante.'},
{judul: 'Donec Adipiscing', konten: 'Donec adipiscing, diam eget tempor volutpat, odio justo molestie dolor, vitae sodales felis risus a mi.'},
{judul: 'Praesent Mollis', konten: 'Praesent mollis placerat mi ut accumsan. Vivamus ultricies lobortis risus, quis venenatis ligula elementum id.'},
],
berita_filtered: []
};
const Berita = Vue.extend({
template: '#berita',
data: function() {
return data_berita;
},
methods: {
search: function() {
var katakunci = new RegExp(this.keywords, 'ig');
if (this.keywords.length > 2) {
this.berita_filtered = this.berita.filter(el => el.judul.search(katakunci)>-1);
} else {
this.berita_filtered = [];
}
}
}
});

// 2. Definisikan routing menuju komponen
const routes = [
{ path: '/', component: Home},
{ path: '/berita', component: Berita }
]

// 3. Buat instance Router Vue
const router = new VueRouter({ routes })

// 4. Tempelkan instance "router" ke App Vue
const spa = new Vue({ router }).$mount('#spa');


Saya akan coba jelaskan beberapa poin penting yang perlu kita perhatikan disini, terutama bagi teman-teman yang baru mengenal Vue:


  1. Untuk contoh SPA ini saya menggunakan juga framework Bootstrap versi 4.0, jadi pastikan bahwa Anda juga sudah mengunduh dan menginstall Bootstrap. Pada tulisan ini semua file CSS saya letakkan pada direktori assets/css/ dan semua file Javascript saya letakkan pada direktori assets/js/;

  2. Untuk menggunakan Vue, kita harus sudah meng-include library Javascript Vue pada bagian head file HTML. Karena kita membangun antar muka SPA, maka kita juga memerlukan Vue Router yang bertugas melakukan routing komponen ke view-nya masing-masing. Unduh library Vue.js di sini dan Vue Router di sini. Atau apabila Anda adalah tipe pemalas download library Javascript gunakan versi CDN masing-masing hehehe;

  3. Perhatikan terdapat custom tag <router-link class="nav-link" to="/">Home</router-link> yang secara otomatis akan dikenali oleh Vue Router dan akan diubah ke tag A sebagai hyperlink menuju route yang ditunjuk oleh atribut "to". Semua hyperlink yang menuju ke route Vue harus menggunakan custom tag ini;

  4. Custom tag <router-view></router-view> berfungsi sebagai tempat penampung (placeholder) dari view untuk masing-masing komponen route;

  5. View atau tampilan untuk masing-masing komponen kita definisikan dengan menggunakan tag <script type="text/x-template" id="berita">. X-Templates adalah salah satu jenis template yang didukung oleh Vue, dan menurut saya yang paling aman dan mudah untuk digunakan untuk kebutuhan aplikasi skala kecil hingga menengah;

  6. Kode dalam bentuk seperti {{ judul }}, {{ konten }} disebut juga sebagai Mustache yang merupakan placeholder untuk data.
    moustache akan otomatis digantikan oleh Vue dengan data yang kita tetapkan pada komponen dan data tersebut sudah bersifat reaktif.

  7. Vue juga memiliki atribut directive, yang kita gunakan pada contoh ini antara lain adalah v-bind, v-if, v-else, v-for, v-model dan v-on. v-model kita gunakan untuk mereaktifkan sebuah tag HTML dengan model data yang kita definisikan pada Vue/komponen, v-if dan v-else memungkinkan kita me-load bagian dari view dengan kondisi tertentu, v-for memungkinkan kita untuk melakukan pengulangan/loop pada view dan sangat berguna untuk menampilkan data dalam bentuk Array atau Object Javascript dan v-on kita gunakan untuk mengaitkan suatu tag HTML dengan "method" yang kita definisikan di dalam kode Javascript Vue;

  8. Semua kode Javascript untuk menjalankan Vue diletakkan pada file assets/js/app.js dan diletakkan pada bagian paling bawah kode HTML;

  9. Variabel objek data_berita pada kode Javascript Vue bersifat static (tidak dinamis), pada aplikasi SPA yang sesungguhnya data berita ini akan diambil melalui AJAX ke database pada aplikasi di sisi server;

  10. Untuk membuat komponen (dalam terminologi aplikasi web MVC tradisional kita bisa anggap komponen merupakan sebuah controller sekaligus model), kita menggunakan sintak Vue.extend({});

  11. Setiap komponen merupakan objek Javascript yang biasanya memiliki property template, data, methods dan/atau computed;

  12. Aplikasi Vue dijalankan dengan membuat instance melalui konstruktor Vue yaitu const spa = new Vue({}). Setelah itu objek spa bisa diakses oleh komponen melalui methods.




Apabila file index.html kita jalankan melalui browser maka kita akan melihat aplikasi kita seperti berikut ini:




Kita bisa lihat bahwa perpindahan antara satu halaman ke halaman lain dilakukan dengan sangat cepat karena tidak membutuhkan request HTTP kembali ke server. Semua proses pengolahan/rendering tampilan antar muka dilakukan di sisi client oleh Vue, request HTTP hanya dibutuhkan untuk komunikasi data dalam format JSON atau plain-text lainnya, bukan untuk kode HTML yang membuat aplikasi menjadi lebih cepat layaknya aplikasi desktop. Pada tulisan bagian 2 kita akan melihat contoh yang sedikit lebih kompleks dengan melibatkan form isian data. Selamat mencoba!

Read More

21 December 2017

Frontend aplikasi web dengan AngularJS dan backend PHP

14:18 0

Sebenarnya topik ini sudah agak basi, tetapi berhubung saya ingin mendokumentasikan "eksperimen" saya pada framework frontend dan backend untuk pengembangan aplikasi berbasis web, maka saya tetap ingin menulis artikel ini. Bagi teman-teman yang belum mengenal framework AngularJS, bisa membaca FAQ-nya di halaman FAQ AngularJS. Intinya AngularJS adalah framework untuk membangun antarmuka aplikasi web berbasis Javascript. Ada dua versi Angular, AngularJS (versi 1) dan Angular (versi 2) yang full terintegrasi dengan Node.js, yang saya bahas adalah versi pertama dimana kita tidak perlu menggunakan Node.js. Kenapa saya memilih versi ini karena versi pertama bisa kita integrasikan dengan project aplikasi web yang sudah dengan backend apapun, dalam artikel ini saya menggunakan PHP.



Instalasi


Untuk menggunakan AngularJS kita perlu mengunduh (download) file Javascript-nya AngularJS terlebih dahulu. Setelah file Javascript AngularJS telah terunduh berikutnya kita tinggal me-link file Javascript tersebut dari dalam kode HTML kita. Pada artikel ini saya menempatkan file angular.min.js pada direktori libs/js/angular.min.js. Apabila kita masukkan pada kode HTML akan seperti ini:

<!doctype html>
<html ng-app="arsipApp"><head>
<title>Aplikasi Web Arsip</title>
<script src="libs/js/angular.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
</head>

Atau apabila aplikasi web kita sudah kita letakkan pada server dan sudah terkoneksi dengan jaringan Internet maka kita bisa memanfaatkan layanan CDN:
<!doctype html>
<html ng-app="arsipApp"><head>
<title>Aplikasi Web Arsip</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
</head>

Pada kode di atas saya juga me-link file HTML dengan framework CSS Bootstrap agar tampilan aplikasi web sedikit lebih nyaman dilihat.

Frontend static


Bagi teman-teman yang sudah menggunakan aplikasi web Gmail atau Google Mail maka akan melihat bahwa Google membangun antarmukanya dengan menggunakan Javascript yang kemungkinan juga merupakan cikal bakal dari lahirnya framework AngularJS ini. AngularJS menganut prinsip MVW (Model-View-Whatever), dimana file HTML merupakan View (tampilan) dan kode Javascript yang mengandung logika aplikasi dan model (controller). Untuk contoh aplikasi web yang saya buat untuk artikel ini saya akan membuat aplikasi web untuk pendataan Arsip sederhana. Untuk melihat cara kerja dari AngularJS ada baiknya kita coba dengan menggunakan halaman web sederhana yang menggunakan data tidak permanen (data tidak disimpan secara permanen ke backend). Buatlah sebuah file HTML dengan nama index.html dan isikan dengan kode HTML berikut:


index.html


<!doctype html>
<html ng-app="arsipApp">
<head>
<title>Aplikasi Web Arsip</title>
<script src="libs/js/angular.min.js"></script>
<script src="controllers/arsip.js"></script>
<link rel="stylesheet" type="text/css" href="libs/bootstrap/css/bootstrap.min.css" />
</head>
<body>
<div class="container">
<h2>Aplikasi Arsip</h2>
<hr/>
<div ng-controller="arsipController as arsip">
<input type="text" ng-model="arsip.cari" class="form-control" style="border-radius: 50px;" placeholder="Masukkan kata kunci untuk mencari" />
<hr/>
<h5>Tambah Data Arsip</h5>
<form name="formArsip" ng-submit="arsip.tambah()">
<div class="row">
<div class="col">
<input type="text" ng-model="arsip.inputKode" class="form-control" placeholder="Kode arsip" required />
</div>
<div class="col">
<input type="text" ng-model="arsip.inputJudul" class="form-control" placeholder="Judul arsip" required />
</div>
<div class="col">
<input class="btn btn-primary" type="submit" value="Tambah" ng-disabled="formArsip.$invalid">
</div>
</div>
</form>
<hr/>
<div class="alert alert-info">Jumlah total arsip {{arsip.total()}}</div>
<table class="table table-bordered table-striped">
<thead>
<tr><th>Kode</th><th>Judul</th><th> </th></tr>
</thead>
<tbody>
<tr ng-repeat="data in arsip.data | filter:arsip.cari track by data.kode">
<td>{{data.kode}}</td>
<td>{{data.judul}}</td>
<td><button type="button" class="btn btn-danger" ng-click="arsip.hapus(data.kode)">Hapus</button></td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>


Buatlah sebuah direktori baru dengan nama controllers, dan didalam direktori baru ini buatlah sebuah file Javascript bernama arsip.js. Isikan file tersebut dengan kode berikut:



controllers/arsip.js


/**
* Modul "arsipApp"
* Controller "arsipController"
*/
angular.module('arsipApp', []).controller('arsipController', function() {
// variabel "arsip" merujuk kepada objek/instance dari "arsipController"
var arsip = this;

// controller "arsipController" memiliki property/anggota "data" untuk menampung data arsip
arsip.data = [];

// metode "tambah" untuk menambahkan data arsip
arsip.tambah = function() {
arsip.data.push({kode: arsip.inputKode, judul:arsip.inputJudul});
arsip.inputJudul = '';
arsip.inputKode = '';
};

// metode "hapus" untuk menghapus data arsip terpilih
arsip.hapus = function() {
var konf = confirm('Yakin akan menghapus data ini?');
if (konf) {
arsip.data.splice(this.$index, 1);
}
};

// metode "total" untuk mendapatkan jumlah total data arsip
arsip.total = function() {
var count = arsip.data.length;
return count;
};
});


Pada kode HTML index.html coba perhatikan pada atribut tag yang saya berikan warna kuning, atribut-atribut tersebut adalah atribut spesifik AngularJS atau biasa juga disebut directive. Atribut ng-app contohnya menandakan bahwa halaman web ini menggunakan modul arsipApp yang kita definisikan pada file controllers/arsip.js, sedangkan atribut ng-controller menetapkan bahwa semua yang berada di dalam scope atau cakupan dari tag tersebut bisa menggunakan controller arsipController yang instance/objek-nya bernama arsip sebagaimana tertulis arsipController as arsip. Atribut ng-repeat kita gunakan untuk melakukan iterasi/loop data. Atribut ng-model mengikat (binding) tag tersebut ke properti yang namanya didefinisikan di dalamnya. Atribut ng-click, ng-submit merupakan atribut terkait event yang terjadi pada browser, dimana nilai atribut-atribut ini biasanya memanggil metode-metode yang sudah kita definisikan pada controller arsipController. Adapun untuk menampilkan nilai (value) dari suatu variabel Javascript pada AngularJS kita menggunakan ekspresi {{namaVariabel}}. Apabila kita buka file index.html pada browser maka kita akan melihat tampilan seperti berikut ini:





Coba isikan beberapa data arsip untuk melihat hasilnya.



Frontend Dinamis dengan Backend server


Sayangnya pada contoh aplikasi yang kita buat sebelumnya, data arsip yang kita buat tidaklah permanen karena aplikasi sebenarnya hanya berjalan di sisi client saja (browser), sehingga ketika browser kita tutup maka data arsip yang sudah kita masukkan hilang. Agar kita bisa menyimpan data arsip secara permanen maka kita harus menggunakan backend server, salah satunya dengan menggunakan PHP. Kita bisa juga menggunakan solusi penyimpanan data cloud seperti Firebase atau Google Cloud. Untuk contoh kali ini kita akan membuat backend sendiri dengan menggunakan PHP dan database SQLite. Buatlah sebuah folder pada direktori web server dengan nama testws dan di dalamnya buatlah file PHP dengan nama index.php, db.php, post.php dan sebuah direktori kosong dengan nama db (sebagai tempat file database SQLite_. Isikan file index.php dengan kode sebagai berikut:



htdocs/testws/db.php


<?php
// koneksi ke database SQLite3
try {
$pdo = new PDO('sqlite:./db/arsip.sq3', null, null, array(PDO::ATTR_PERSISTENT => true));
} catch(Exception $e) {
$error = array('error' => 'Gagal terkoneksi ke database karena '.$e);
// tampilkan data dalam format json
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
echo json_encode($error); die();
}

// buat tabel apabila belum ada
$table_def = 'CREATE TABLE IF NOT EXISTS arsip (kode VARCHAR PRIMARY KEY, judul VARCHAR NOT NULL)';
$create = $pdo->exec($table_def);
if ($create === false) {
$error = array('error' => 'Error ketika membuat tabel!');
// tampilkan data dalam format json
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
echo json_encode($error); die();
}


Script PHP index.php melakukan koneksi ke database SQLite dengan nama arsip.sq3 dan membuat tabel arsip apabila belum ada sebelumnya.



htdocs/testws/index.php


<?php
// koneksi ke database SQLite3
require 'db.php';

// ambil data
$json = array();
$select_str = 'SELECT * FROM arsip';

// filter data berdasarkan kata kunci pencarian
$filter = filter_input(INPUT_GET, 'katakunci');
if ($filter) {
$select_str .= " WHERE kode LIKE '$filter%' OR judul LIKE '%$filter%'";
}
$query_data = $pdo->query($select_str);
while ($row = $query_data->fetch(PDO::FETCH_ASSOC)) {
$json[] = $row;
}

// tampilkan data dalam format json
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
echo json_encode($json); die();


Script PHP index.php menampilkan data dalam format JSON.



htdocs/testws/post.php


<?php
// koneksi ke database SQLite3
require 'db.php';

// masukkan data
$post_data = file_get_contents('php://input');
$input = json_decode($post_data);
if (is_object($input)) {
$sth = $pdo->prepare('REPLACE INTO arsip VALUES (:kode, :judul)');
$data = array(':kode' => $input->kode, ':judul' => $input->judul);
$sth->execute($data);

$json = array('status' => 'sukses');
} else {
$json = array('status' => 'gagal');
}

// tampilkan data dalam format json
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: *');
header('Access-Control-Allow-Methods: POST');
header('Content-type: application/json');
echo json_encode($json); die();


Script PHP post.php menerima data dalam format JSON melalui front end AngularJS untuk dimasukkan ke database SQLite.




htdocs/testws/delete.php


<?php
// koneksi ke database SQLite3
require 'db.php';

// masukkan data
$kode_delete = file_get_contents('php://input');;
if (!empty($kode_delete)) {
$sth = $pdo->prepare('DELETE FROM arsip WHERE kode=:kode');
$data = array(':kode' => $kode_delete);
$sth->execute($data);

$json = array('status' => 'sukses');
} else {
$json = array('status' => 'gagal');
}

// tampilkan data dalam format json
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: *');
header('Access-Control-Allow-Methods: DELETE');
header('Content-type: application/json');
echo json_encode($json); die();


Script PHP delete.php menghapus record arsip pada database SQLite sesuai dengan kode yang dikirim melalui front end AngularJS. Kita juga harus mengubah kode controller Javascript kita pada file arsip.js agar menggunakan service $http yang disediakan oleh AngularJS untuk melakukan request AJAX ke backed server PHP yang sudah kita buat.



controllers/arsip.js


/**
* Modul "arsipApp"
* Controller "arsipController"
*/
angular.module('arsipApp', []).controller('arsipController', function($scope, $http) {
// variabel "arsip" merujuk kepada objek/instance dari "arsipController"
var arsip = this;

// controller "arsipController" memiliki property/anggota "data" untuk menampung data arsip
arsip.data = [];
// ambil data arsip dari server
$http.get('http://localhost/testws/index.php').then(function(response) {
arsip.data = response.data;
});

// metode "tambah" untuk menambahkan data arsip
arsip.tambah = function() {
var baru = {kode:arsip.inputKode, judul:arsip.inputJudul};
var updateIndex = arsip.data.findIndex(function(obj) {
return obj.kode == arsip.inputKode;
});
$http.post('http://localhost/testws/post.php', angular.toJson(baru))
.then(function() {
if (updateIndex > -1) {
arsip.data[updateIndex].kode = arsip.inputKode;
arsip.data[updateIndex].judul = arsip.inputJudul;
} else {
arsip.data.push(baru);
}
arsip.inputJudul = '';
arsip.inputKode = '';
}, function() {
alert('Data gagal dimasukkan ke database');
});
};

// metode "hapus" untuk menghapus data arsip terpilih
arsip.hapus = function(kode) {
var deleteIndex = arsip.data.findIndex(function(obj) {
return obj.kode == kode;
});
var konf = confirm('Yakin akan menghapus data ini?');
if (konf) {
$http.delete('http://localhost/testws/delete.php', {data: kode})
.then(function() {
arsip.data.splice(deleteIndex, 1);
}, function() {
alert('Data gagal dihapus ke database');
});
}
};

// metode "ubah" untuk mengubah data arsip
arsip.ubah = function(kode) {
var ubahIndex = arsip.data.findIndex(function(obj) {
return obj.kode == kode;
});
console.log(arsip.inputKode);
arsip.inputJudul = arsip.data[ubahIndex].judul;
arsip.inputKode = arsip.data[ubahIndex].kode;
};

// metode "total" untuk mendapatkan jumlah total data arsip
arsip.total = function() {
var count = arsip.data.length;
return count;
};
});


Pada kode view index.html kita ubah sedikit kode HTML pada bagian tag table menjadi seperti berikut ini:



index.html


...
<table class="table table-bordered table-striped">
<thead>
<tr><th>Kode</th><th>Judul</th><th> </th><th> </th></tr>
</thead>
<tbody>
<tr ng-repeat="data in arsip.data | filter:arsip.cari track by data.kode">
<td>{{data.kode}}</td>
<td>{{data.judul}}</td>
<td><button type="button" class="btn btn-info" ng-click="arsip.ubah(data.kode)">Ubah</button></td>
<td><button type="button" class="btn btn-danger" ng-click="arsip.hapus(data.kode)">Hapus</button></td>
</tr>
</tbody>
</table>
...




Dengan menggunakan kode baru ini maka aplikasi web AngularJS kita telah menggunakan data real-time ke server backend menggunakan PHP dan database SQLite, silahkan dicoba untuk memasukkan data, menghapus dan mengubah data. Selamat coding dan mencoba 😁.

Read More

18 April 2013

PUSTAKAWAN: membuat pathfinder online menjadi lebih mudah

21:30 0

Pustakawan adalah projek open source baru saya untuk memudahkan pustakawan dan profesional informasi lain dalam membangun pathfinder online. Bagi anda yang belum mengetahui apa itu pathfinder, izinkan saya menjelaskan sedikit mengenai apa yang disebut pathfinder. Sederhananya pathfinder adalah panduan yang disusun oleh pustakawan, yang berisikan daftar-daftar sumber informasi dalam berbagai bentuk, seperti buku, website, jurnal, jurnal online, dll. mengenai topik tertentu, untuk membantu pemustaka mendapat sumber YANG TEPAT mengenai topik tertentu







Halaman depan "Pustakawan" menampilkan daftar subjek terkait sumber informasi yang digunakan






Halaman daftar sumber informasi pada subjek tertentu




Fitur-fitur yang akan direncanakan ke depan adalah:


  • Metadata sumber informasi menggunakan standar metadata Dublin Core

  • Manajemen taksonomi subjek hirarkis dengan konsep semantik seperti Tesaurus

  • Fitur langganan bagi pemustaka/peneliti yang ingin mendapatkan update mengenai subjek yang mereka inginkan

  • Integrasi dengan sumber sumber perpustakaan elektronik seperti metadata MODS yang disediakan oleh Senayan Library Management System

  • Layanan feed/sindikasi sumber informasi menggunakan RSS

  • Pencarian data sumber informasi

  • Fitur "Ask Librarian" yang memungkinkan pemustaka berkomunikasi real-time dengan pustakawan





Untuk saat ini software "Pustakawan" masih dalam tahap pengembangan dini, yang artinya masih sangat awal dan belum dapat digunakan untuk skala testing apalagi percobaan. Mohon doa dan restu agar bisa segera dirampungkan versi awal dari software ini. Sekali lagi dengan software ini saya ingin menekankan bahwa software hanyalah "alat", "ISI"-nya adalah tugas intelektual seorang pustakawan :)

Read More

https://payclick.com/

Contact us for advertising.