7 UCAPAN TERIMA KASIH Buku ini saya persembahkan khusus untuk: 1. Kedua orang tuaku yang selalu memberikan do’a 2. Isteriku Umie yang selalu memberikan motivasi dalam suka maupun duka, anak-anakku Fascal Galih Hariyanto, Izal Fathoni dan Cahyani Putri Riyanto yang selalu menghibur di saat lelah 3. Rekan-rekan kerja di PDII-LIPI: Budi Nugroho, Sjaeful Afandi, Ekawati Marlina, Al Hafidz Akbar Maulana S., Rishadi, Endang Mulus Rahayu, dan Ratih Keumala Sari 4. Romi Satria Wahono dan Hendro Subagyo, selaku guru dan inspirator 5. Rekan-rekan lain yang tidak dapat saya sebutkan satu persatu. Semoga buku ini bermanfaat
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
7
UCAPAN TERIMA KASIH
Buku ini saya persembahkan khusus untuk:
1. Kedua orang tuaku yang selalu memberikan do’a
2. Isteriku Umie yang selalu memberikan motivasi dalam suka maupun
duka, anak-anakku Fascal Galih Hariyanto, Izal Fathoni dan Cahyani
Putri Riyanto yang selalu menghibur di saat lelah
3. Rekan-rekan kerja di PDII-LIPI: Budi Nugroho, Sjaeful Afandi,
Ekawati Marlina, Al Hafidz Akbar Maulana S., Rishadi, Endang
Mulus Rahayu, dan Ratih Keumala Sari
4. Romi Satria Wahono dan Hendro Subagyo, selaku guru dan
inspirator
5. Rekan-rekan lain yang tidak dapat saya sebutkan satu persatu.
Semoga buku ini bermanfaat
7
KATA PENGANTAR
Jika kita perhatikan perkembangan internet semakin tidak terkendali, hal
ini mengubah pola hidup seseorang. Dulu orang harus ke pasar atau
hypermarket untuk membeli barang namun sekarang dapat dilakukan
melalui smartphone. Dulu untuk membeli tiket pesawat harus datang ke
agen terdekat namun sekarang dapat dipesan melalui smartphone. Dulu
para mahasiswa maupun peneliti harus datang ke perpustakaan untuk
mendapatkan infromasi yang diinginkan, namun sekarang dapat
ditemukan hanya melalui smartphone.
Pada tahun 2011-2012, Google melakukan riset "Trends in digital device
& internet usage" (Smartphone, Tablet, Netbooks, dan TV Internet)
dengan total 3.000 responden terhadap lima negara yaitu: Amerika
Serikat, Inggris, Jerman, Perancis, dan Jepang. Riset dilakukan dengan
berbagai metodologi yang menghasilkan output dari berbagai sudut
pandang, salah satunya adalah akses internet melalui smartphone,
Amerika Serikat 44%, Inggris 51%, Perancis 38%, Jerman 29%, dan
Jepang 20%. Cisco System, Inc juga memprediksi bahwa pada tahun 2015
jumlah pengguna dan fitur perangkat mobile akan meningkat secara
eksponensial yang akan mencapai sekitar 788 juta ponsel untuk
mengakses halaman website. Hal ini dikarenakan browser berbasis mobile
sudah dapat menampilkan halaman situs web sama bagusnya dengan
browser berbasis PC/Notebook.
Melihat perkembangan teknologi dan hasil riset yang dilakukan oleh
perusahaan terkemuka, kita seharusnya dapat mengambil hikmah untuk
mempersiapkan dalam menghadapi tantangan 10 tahun ke depan,
8
minimal jangka pendek. Bagaimana mengubah mindset seseorang yang
awalnya hanya menggunakan PC/Notebook untuk mengakses halaman
situs web beralih ke smartphone ? Kuncinya adalah Web Responsif,
karena dengan teknologi tersebut akan memudahkan pengguna dalam
mencari informasi yang diinginkan. Tampilan situs web harus disesuaikan
dengan media dan resolusi yang digunakan oleh pengguna.
Pengguna akan “malas” untuk mengakses sebuah situs web jika tampilan
versi mobile sama dengan versi PC/Notebook. Betapa tidak? Teks akan
terlihat sangat kecil jika diakses melalui smartphone, harus diperbesar
dulu tampilannya kemudian harus sering melakukan scroll. Semua
kendala dan kesulitan tersebut harus segera diatasi agar pengguna lebih
nyaman membaca informasi yang disajikan.
Buku ini wajib dibaca agar permasalahan situs web Anda segera dapat
diatasi, pada akhirnya pengunjung makin banyak dan sering berkunjung
kembali di lain waktu.
Bogor, Februari 2014
Slamet Riyanto
7
DAFTAR ISI
BAB I PENDAHULUAN
BAB II PERBEDAAN FIXED, LIQUID, ADAPTIVE, DAN
RESPONSIVE WEB
2.1 Fixed Web Design
2.2 Liquid/Flexible Web Design
2.3 Adaptive Web Design
2.4 Responsive Web Design
BAB III CSS FRAMEWORK
3.1 What is CSS Framework?
3.2 960 Grid System
3.3 Blueprint
3.4 Bootstrap
3.5 Cardinal
3.6 Cascade Framework
3.7 Columnal
3.8 Floatz
3.9 Fluidable
3.10 Foundation
3.11 Gumby Framework
3.12 Skeleton
3.13 YAML (Yet Another Multicoloumn Layout)
3.14 YU CSS Grids
BAB IV WEB DESIGN WIREFRAME FOR MOCKUP
4.1 MockFlow
8
4.2 Axure
4.3 Balsamiq Mockup
4.4 Pencil Project
4.5 HotGloo
4.6 Mockingbird
4.7 Cacoo
4.8 ProtoShare
4.9 iPlotz
4.10 JustinMind
BAB V DESAIN RESPONSIF UNTUK MEROMBAK ALUR KERJA
5.1 Mobile First
5.2 Content Strategy
5.3 Sketch and Prototype
5.4 Frameworks
5.5 Breakpoints
5.6 Scalable Images
5.7 Minicifation
BAB VI PRAKTIKUM MEMBUAT WEB RESPONSIF
6.1 Merancang Template yang Keren
6.2 Menentukan CSS Framework
6.3 Management File dan Direktori
6.4 Merancang Template dengan Sistem Grid
6.5 Membagi Tata Letak berdasarkan Kolom
6.6 Praktek Sederhana dalam Format HTML5
BAB VII CSS3 MEDIA QUERY
7.1 General Style
7.2 Desktop and Notebook Widescreen High Resolution
7.3 Desktop and Notebook
7.4 Netbook and Tablet
7.5 Smartphones
9
BAB VIII BEST PRACTICE: DYNAMIC WEB WITH PHP & MYSQL
8.1 Persiapan Awal
8.2 Membuat Function
8.3 Proses Query untuk Frontend
BAB IX HALAMAN ADMINISTRATOR
9.1 Menggunakan Free Admin Template
9.2 Merancang Halaman Administrator
9.3 Membuat Panel Menu
9.4 Membuat Halaman Login
9.5 Membuat Dashboard
9.6 Membuat Modul Berita
9.6.1 Menampilkan Daftar Berita
9.6.2 Form Input
9.6.3 Multilevel Dropdown Menu
9.6.4 Insert into MySQL
9.6.5 Form Edit
9.6.6 Update into MySQL
9.6.7 Delete from MySQL
1
BAB 1 PENDAHULUAN
Jika Anda berpikir harus mengembang website versi mobile, pikir ulang
kembali sebelum melaksanakan. Tampilan website yang ideal harus
memiliki berbedaan tampilan ketika diakses melalui mobile, tablet
maupun PC/Notebook. Hal ini untuk memberikan kenyaman kepada
pengguna ketika mencari informasi dalam website tersebut. Apa yang
terjadi jika website diakses melalui mobile ? Teks tidak mungkin terbaca
dan harus memperbesar tampilan beberapa kali. Ini akan membuang
waktu dan energi hanya sekadar ingin melihat sebuah menu yang
ditampilkan. Mengapa hal ini bisa terjadi? Sistem yang digunakan untuk
membangun website tersebut tidak mendukung teknologi responsive web.
Diskusi tentang Responsive Web Design (RWD) sudah populer sejak
tahun 2012, namun belum banyak yang menerapkan teknologi tersebut.
Jumlah pengguna dan fitur untuk perangkat mobile telah meningkat
secara eksponen dalam beberapa tahun terakhir. Browser versi mobile
sekarang dapat menampilkan halaman web sama bagusnya dengan versi
desktop, sehingga sekarang menjadi hal biasa bagi orang untuk
melakukan browsing melalui website dari ponsel atau tablet. Cisco
memprediksi bahwa pengguna ponsel akan tumbuh lebih besar di masa
depan sehingga pada tahun 2015 akan bertambah menjadi 788 juta
pengguna ponsel.
Beberapa website luar negeri sudah banyak yang menerapkan karena hal
ini memang sangat penting. Sedangkan di Indonesia belum banyak yang
menerapkannya, banyak faktor yang mempengaruhinya. Bisa
menyangkut masalah dana, waktu, sumberdaya manusia, pengetahuan,
2
dan faktor lainnya. Bagaimana jika ingin mengembangkan responsive web
tanpa mengganggu website yang sudah ada? Hal ini akan dijelaskan secara
mendetail pada bagian lain dalam buku ini.
Menurut sebuah survei yang dilakukan oleh Proyek Pew Research Center
for Excellence in Journalism (PEJ) bekerjasama dengan The Economist
Group, merinci berita yang digunakan pada perangkat mobile
mengungkapkan bahwa setengah dari semua orang dewasa di Amerika
Serikat kini memiliki koneksi mobile ke web melalui sebuah smartphone
atau tablet, secara signifikan pada tahun 2011, dan ini memiliki implikasi
besar terhadap mekanisme berita yang akan dikonsumsi dan dibayar.
Pengguna ponsel, tidak hanya memeriksa berita utama pada perangkat
mereka, walaupun hampir semua menggunakan perangkat untuk update
berita terbaru. Banyak juga membaca berita lama - 73% orang dewasa
mengkonsumsi berita melalui tablet mereka untuk membaca artikel-
artikel secara mendalam atau setidaknya kadang-kadang, termasuk 19%
yang melakukannya setiap hari. Sepenuhnya 61% dari konsumen berita
setidaknya kadang-kadang membaca cerita yang lebih panjang, dan 11%
secara teratur.
Tahun 2013 menjadi tahun RWD untuk lepas landas, mengingat adopsi
yang cepat dari tablet dan smartphone - dan fakta bahwa pengguna saat
ini tampaknya lebih suka membaca berita mereka melalui web mobile
dibanding dalam bentuk aplikasi.
“Now more than ever, we’re designing work meant to be viewed along a
gradient of different experiences. Responsive web design offers us a way
forward, finally allowing us to 'design for the ebb and flow of things” – Ethan
Marcotte, seorang penulis Responsive Web Design.
Dasar desain web responsif Pada dasarnya RWD memungkinkan situs web untuk menanggapi atau
beradaptasi dengan ukuran viewport yang berbeda, lebih kecil atau lebih
besat tanpa mengatur domain atau subdomain khusus untuk pengguna
yang menggunakan perangkat ponsel ketika mengakses situs web.
3
Tampilan dan nuansa warna dapat dipertahankan untuk memiliki
pengalaman yang sama meski menggunakan ukuran perangkat yang
berbeda. Hal ini dimungkinkan dengan penggunaan viewport meta tag
dan CSS3 media query.
Viewport meta tag dan CSS3 media queries Sebuah web responsif utamanya dibangun dengan dua komponen.
Komponen pertama adalah meta tag viewport. Tag ini ditempatkan dalam
tag <head> dan digunakan untuk mengontrol skala dari halaman website.
Misalnya, menambahkan viewport meta tag dengan mengatur skala awal
1 yang akan memungkinkan halaman web untuk ditingkatkan sebesar 100
persen dari skala ukuran viewport saat membuka untuk pertama kalinya.
Komponen kedua adalah CSS3 media query (http://www.w3.org/TR/css3-
mediaqueries/) yang menentukan gaya untuk ukuran viewport tertentu.
Misalnya potongan kode berikut menunjukkan bagaimana kita dapat
menyembunyikan gambar ketika ukuran viewport adalah antara 321 px
dan 480 px. (@media screen and (min-width: 321px) and (max-
width: 480px) {img { display: none; }}).
Keterbatasan desain web responsif Point penting di sini adalah RWD tidak cukup sempurna, ada beberapa
masalah yang harus diselesaikan, termasuk membuat gambar menjadi
responsif. Praktek saat ini untuk membuat gambar responsif adalah
menggunakan skala agar sesuai dengan viewport dengan maksimal lebar
(max-width: 100%) atau mungkin menyembunyikan tampilan (display:
none) ketika gambar tidak ingin ditampilkan.
Masalah lain yang saat prakte di lapangan adalah bahwa hanya mengubah
presentasi gambar, sedangkan gambar yang sebenarnya apda dokumen
HTML tetap ditidak berpengaruh. Ini berarti bahwa pengguna masih bida
mengunduh resolusi gambar yang sama dengan ukuran lebih besar
terlepas dari perangkat dan viewport yang digunakan, hal ini
52 Tag border-radius akan menghasilkan sudut lengkung terhadap
objek. Agar tampilan dapat diterima oleh beberapa browser harus
ditambahkan awalan pada properti yaitu –moz-, -o-, -webkit-, dan –
ms. Jika sudah menambahkan properti dan value, maka akan
menghasilkan tampilan seperti gambar berikut.
Gambar 7.31 Tampilan fitur copyright setelah diberi paramater dalam CSS
53 Kita akan memodofikasi tampilan Top Menu. Yang ada saat ini,
tampilan kurang menarik sehingga perlu mengganti jenis huruf yang
digunakan.
Gambar 7.32 Tampilan Top Menu standar
124
54 Untuk mengganti jenis huruf, tambahkan nama class kemudian atur
property dan value.
.navbar {padding:0;}
.navbar-brand{font-family:'Gill Sans MT'; font-weight:bold; font-size:170%;} .navbar-nav{font-family:'PT Sans Narrow';} .nav{font-size:110%; color:#ffffff;}
55 Lihat hasilnya di browser.
Gambar 7.33 Tampilan Top Menu setelah dimodifikasi
56 Terakhir, urutkan nama class sesuai abjad agar mudah ditemukan
ketika memodofikasi kembali. Caranya, seleksi semua nama class.
Gambar 7.34 Menyeleksi kode CSS
125
57 Pilih menu Edit > Sort Lines, atau tekan tombol F9 pada keyboard.
Gambar 7.35 Menu untuk mengurutkan kode CSS agar lebih rapi
58 Lihat hasilnya.
Gambar 7.36 Tampilan kode CSS setlah diurutkan
126
7.2 Desktop and Notebook Widescreen High Resolution
Ada beberapa referensi untuk menentukan resolusi layar ponsel tanpa
harus memperhatikan merek tertentu. Dengan standar minimal dan
maksimal, akan menghasilkan tampilan website yang fleksibel. Kita tidak
perlu menentukan resolusi untuk tiap merek ponsel yang beredar. Cukup
dengan membatasi nilai minimal dan maksimal terhadap lebar layar
ponsel maupun tablet secara portrait maupun landscape, maka tampilan
website akan secara otomatis menyesuaikan diri.
Beberapa CSS Framework menentukan batasan resolusi untuk mobile,
tablet, dan desktop yang bervariasi. Misalnya, jika menggunakan
Bootstrap resolusi minimal yang digunakan adalah 768 pixel sehingga
apabila orang melakukan browsing menggunakan ponsel yang resolusinya
di bawah angka tersebut maka akan mengikuti standar acuan yang
diterapkan dalam resolusi 768 pixel. Hal ini menjadi problem, terutama
media yang ditampilkan berupa teks. Jika menggunakan resolusi 768, teks
masih terbaca dengan jelas karena menggunakan tablet dan ukuran huruf
juga cukup besar. Namun akan menjadi sulit terbaca jika menggunakan
ponsel dengan resolusi rendah. Untuk mengatasi hal tersebut, perlu
pengaturan ukuran huruf apabila media yang digunakan berada di bawah
768 pixel atau bahkan di atasnya.
1. Pertama kali, ubah resolusi layar monitor / notebook ke resolusi
tertinggi.
Gambar 7.37 Mengubah resolusi monitor
2. Kembali ke file style.css, ketikkan beberapa baris untuk menentukan
resolusi media yang digunakan.
127
/* Smartphones (portrait) ----------- */ @media only screen and (max-device-width :320px){} /* Smartphones (portrait and landscape) ----------- */ @media only screen and (min-device-width :321px) and (max-device-width :480px){} /* Smartphones (600 x 400)------ */ @media only screen and (min-device-width :481px) and (max-device-width :767px){} /* Smartphones (800 x 600)----- */ @media only screen and (min-device-width:768px) and (max-device-width:991px){} /* Desktop, Netbook and Tablet (minimal 1024 x 768)----- */ @media only screen and (min-device-width:992px) and (max-device-width:1199px){} /* Desktops & laptops Wide Screen High Resolution (minimal 1280 x 600)----- */ @media only screen and (min-device-width:1200px){}
3. Resolusi yang Penulis gunakan 1360 x 768 pixel (widescreen). Fokus
pada widescreen resolusi tinggi. Tambahkan properti dan value untuk
mengatur ukuran judul, intro dan teks putih.
@media only screen and (min-device-width:1200px) { .judul{font-size: 108%; } .putih{font-size: 140%;} .intro{font-size: 100%;} }
4. Hasilnya, teks judul berita dan intro lebih besar dari ukuran semula.
Gambar 7.38 Tampilan teks setelah dimodifikasi ukuran huruf
128
5. Ubahlah ukuran teks HEADLINE dengan cara membuat class dan
memasukkan property dan value sesuai keinginan. Jika mengikuti
petunjuk dalam buku ini, berikut pengaturan property dan value.
.sans{font-size: 120%;}
.head{margin-top: 30px;} 6. Melalui teknologi RWD, ukuran gambar, foto maupun ilustrasi dapat
disesuaikan tampilannya. Misal, jika menggunakan resolusi di atas
1200 pixel maka gambar akan ditampilkan dalam skala 40%
kemudian jika menggunakan resolusi 786 pixel maka gambar akan
ditampilkan dalam skala 65%. Dalam studi kasus berikut, jika
menggunakan resolusi di atas 1200 pixel maka gambar akan
ditampilkan dalam skala 40%. Perhatikan nama class dalam tag img.
Gambar 7.39 Posisi class crop pada dokumen html
7. Masukkan property dan value.
.img-responsive.crop{width: 50%;} 8. Lihat hasilnya di browser.
Gambar 7.40 Tampilan foto setelah diubah lebarnya
129
9. Teks dan gambar menempel, untuk mengatur agar sisi kanan gambar
terdapat ruang kosong (space), tambahkan class=img-responsive yang
Gambar 8.5 Notifikasi bahwa database sudah berhasil dibuat
5. Aktifkan database responsive.
Gambar 8.6 Mengaktifkan database responsive
6. Kini saatnya membuat tabel dan kolom. Selain dapat ditempuh
melalui user interface, pembuatan tabel dan kolom dapat dilakukan
melalui perintah SQL. Pilih menu SQL.
Gambar 8.7 Memilih menu SQL
7. Masukkan perintah SQL untuk membuat tabel berita. Setelah selesai
klik tombol Go untuk menyimpan data.
CREATE TABLE IF NOT EXISTS `berita` ( `id_berita` int(11) NOT NULL AUTO_INCREMENT, `judul_berita` varchar(255) COLLATE latin1_general_ci NOT NULL, `isi_berita` longtext COLLATE latin1_general_ci NOT NULL, `url_image` varchar(255) COLLATE latin1_general_ci NOT NULL, `tgl_posting` datetime NOT NULL,
161
`tgl_update` datetime NOT NULL, `id_kategori` int(11) NOT NULL, `id_subkategori` int(11) NOT NULL, `id_subsubkategori` int(11) NOT NULL, `id_fitur` int(11) NOT NULL, `id_status` int(11) NOT NULL, `id_user` int(11) NOT NULL DEFAULT '1', `hits` int(11) NOT NULL, PRIMARY KEY (`id_berita`) );
8. Buatlah tabel fitur.
CREATE TABLE IF NOT EXISTS `fitur` ( `id_fitur` int(11) NOT NULL AUTO_INCREMENT, `nama_fitur` varchar(150) COLLATE latin1_general_ci NOT NULL, PRIMARY KEY (`id_fitur`) );
9. Butlah tabel kategori.
CREATE TABLE IF NOT EXISTS `kategori` ( `id_kategori` int(11) NOT NULL AUTO_INCREMENT, `nama_kategori` varchar(150) COLLATE latin1_general_ci NOT NULL, PRIMARY KEY (`id_kategori`) );
10. Buatlah tabel status.
CREATE TABLE IF NOT EXISTS `status` ( `id_status` int(11) NOT NULL AUTO_INCREMENT, `status` varchar(100) COLLATE latin1_general_ci NOT NULL, PRIMARY KEY (`id_status`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;
11. Buatlah tabel subkategori.
CREATE TABLE IF NOT EXISTS `subkategori` ( `id_subkategori` int(11) NOT NULL AUTO_INCREMENT, `nama_subkategori` varchar(150) COLLATE latin1_general_ci NOT NULL, `id_kategori` int(11) NOT NULL, PRIMARY KEY (`id_subkategori`) ) ;
12. Buatlah tabel subsubkategori.
CREATE TABLE IF NOT EXISTS `subsubkategori` ( `id_subsubkategori` int(11) NOT NULL AUTO_INCREMENT, `nama_subsubkategori` varchar(150) COLLATE latin1_general_ci NOT NULL,
162
`id_subkategori` int(11) NOT NULL, PRIMARY KEY (`id_subsubkategori`) ) ;
13. Buatlah tabel user
CREATE TABLE IF NOT EXISTS `user` ( `id_user` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(100) COLLATE latin1_general_ci NOT NULL, `password` varchar(200) COLLATE latin1_general_ci NOT NULL, `fullname` varchar(255) COLLATE latin1_general_ci NOT NULL, `email` varchar(200) COLLATE latin1_general_ci NOT NULL, PRIMARY KEY (`id_user`) ) ;
8.1.2 Memasukkan Data Oleh karena kita belum memiliki halaman administrator untuk
menginput berita, kita harus memasukkan secara manual. Input data
tidak bisa langsung pada tabel berita karena di dalam tabel berita
memiliki relasi dengan tabel lain, diantaranya: tabel kategori, subkategori,
subsubkategori, dan user. Oleh karena, yang pertama kali dilakukan
adalah membuat data kategori, sub kategori, subsub kategori, dan user.
1 Ada dua cara untuk memasukkan data kategori yaitu melalui
halaman phpmyAdmin secara visual atau melalui perintah SQL.
Untuk memasukkan kategori secara visual, pilih tabel kategori.
Gambar 8.8 Memilih tabel kategori
2 Pilih menu Insert.
163
Gambar 8.9 Memilih menu Insert untuk memasukkan record
3 Masukkan nama kategori pada kolom yang telah disediakan.
phpMyadmin menyediakan dua kolom input sekaligus. Jadi, Anda
dapat memasukkan dua nama kategori pada baris atas dan bawah.
Jika sudah selesai, klik tombol Go untuk menyimpan.
Gambar 8.10 Form untuk memasukkan record pada tabel kategori
4 Tunggu beberapa saat, sistem akan menyimpan data yang diinput.
Ulangi langkah 3 untuk membuat kategori yang lain. Berikut
tampilan nama kategori yang sudah berhasil tersimpan.
Gambar 8.11 Beberapa nama kategori yang telah dibuat
164
5 Cara lain adalah memasukkan menggunakan perintah SQL. Pilih
tabel kategori, kemudian pilih menu SQL.
Gambar 8.12 Memilih menu SQL
6 Akan muncul form SQL. Hapus semua teks yang ada dalam form
tersebut.
Gambar 8.13 Tampilan form query SQL
7 Kemudian masukkan perintah SQL. Berikut ini perintah SQL untuk
memasukkan beberapa kategori secara langsung. Jika sudah yakin,
10 Untuk memasukkan data ke tabel user, input menggunakan menu
Insert. Pertama kali aktifkan tabel user.
Gambar 8.14 Memilih tabel user
11 Pilih menu Insert.
Gambar 8.15 Memilih menu Insert untuk memasukkan record pada tabel user
12 Masukkan beberapa informasi yang dibutuhkan. Perhatikan pada
kolom password, harus diubah dalam format MD5 yang berfungsi
untuk enkripsi. Setelah selesai, klik tombol Go.
Gambar 8.16 Halaman form untuk memasukkan record pada tabel user
167
13 Tunggu beberapa saat, hingga sistem selesai memproses. Jika berhasil,
akan muncul informasi seperti gambar berikut.
Gambar 8.17 Data sudah berhasil dimasukkan ke dalam tabel user
14 Berikut ini tampilan beberapa data pada tabel user. Perhatikan pada
kolom password, teks awal sudah dienkripsi sehingga karakternya
berubah menjadi lebih panjang.
Gambar 8.18 Contoh beberapa data pada tabel user
15 Terakhir, masukkan data ke tabel berita. Berikut scipt untuk
memasukkan data melalui perintah SQL.
INSERT INTO `berita` (`id_berita`, `judul_berita`, `isi_berita`, `url_image`, `tgl_posting`, `tgl_update`, `id_kategori`, `id_subkategori`, `id_subsubkategori`, `id_fitur`, `id_status`, `id_user`, `hits`) VALUES (1, 'Daftar Artis Hollywod dengan bayaran mahal tahun 2014', '<p>Vaniti Fair Magazine mengumumkan artis-artis Hollywod dengan bayaran termahal selama kurun waktu 5 tahun sejak 2009 lalu. Berikut ini daftar tiga artis dengan bayaran mahal tahun 2013 yaitu: Angelina Jolie, Sandra Bullock dan Katherine Heigl.</p>', 'slamet-umi.jpg', '2014-01-20 07:54:01', '0000-00-00 00:00:00', 4, 8, 14, 1, 1, 1, 200), (2, 'Tom Cruise Kembali di Sekuel Jack Reacher', '<p>Berikut ini daftar tiga artis dengan bayaran mahal tahun 2013 yaitu: Angelina Jolie, Sandra Bullock dan Katherine Heigl. Lorem Ipsum adalah contoh teks atau dummy dalam industri percetakan dan penataan huruf atau typesetting. Lorem Ipsum telah menjadi standar contoh teks sejak tahun 1500an, saat seorang tukang cetak yang tidak dikenal mengambil sebuah kumpulan teks dan mengacaknya untuk menjadi sebuah buku contoh huruf. </p>', 'no-photo.jpg', '2014-01-20 06:03:06', '0000-00-00 00:00:00', 4, 8, 14, 1, 1, 1, 100);
168
16 Data tersebut hanya sebagai contoh saja. Silakan memasukkan data
lain sesuai keinginan. Perlu diingat, ketika memasukkan kode
kategori, sub kategori, dan sub sub kategori harus melihat kode
masing-masing. Jangan asal memasukkan nomor, karena akan
berakibat fatal dan parahnya data tidak dapat ditampilkan. Jika
mengikuti pentunjuk dalam buku ini, silakan import database yang
sudah disediakan dalam CD buku ini.
8.1.3 Konfigurasi Server Sebelum melakukan query ke database untuk memanipulasi data, harus
berhasil terhubung ke database yang dimaksud. Dalam pemrograman
PHP, dapat dibuat secara sederhana.
1. Pertama kali, buatlah sebuah file baru. Buatlah variabel baru untuk
menentukan localhost, username, password, dan nama database.
2. Buatlah folder baru di dalam folder responsive dengan nama
function. Simpan file tersebut dengan nama word_limit.php dan
letakkan dalam folder responsive/function.
Gambar 8.22 Membuat fungsi pembatasan kata
8.2.2 Fungsi Tanggal Indonesia Seperti telah dijelaskan pada bagian sebelumnya, bahwa format tanggal
(date) harus mengikuti standar internasional yaitu yyyy-mm-dd atau jika
diterjemahkan dalam format tanggal akan berbentuk 2014-08-12. Untuk
mengkonversi tanggal tersebut agar berubah menjadi 12 Agustus 2014,
harus dibuatkan fungsi khusus. Melalui fungsi, maka format tanggal akan
berubah sesuai keinginan.
1. Buatlah file baru, tambahkan script berikut untuk fungsi tanggal
Indonesia.
<?php function DateIndo($date) { // fungsi untuk mengubah tanggal ke dalam format Indonesia // variabel BulanIndo merupakan variabel array yang menyimpan nama-nama bulan $BulanIndo = array("Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"); $tahun = substr($date, 0, 4); // memisahkan format tahun menggunakan substring $bulan = substr($date, 6, 2); // memisahkan format bulan menggunakan substring $tgl = substr($date, 8, 2); // memisahkan format tanggal menggunakan substring
Dengan alamat URL yang bersahabat, tentunya dapat meningkatkan
trafik hasil pencarian. Pada bagian ini, kita akan membuat fungsi untuk
mengubah alamat URL lebih bersahabat.
1. Butlah file baru dan tambahkan script berikut.
<?php function seo_title($s) { $c = array (' '); $d = array ('-','/','\\',',','.','#',':',';','\'','"','[',']','{','}',')','(','|','`','~','!','@','%','$','^','&','*','=','?','+'); $s = str_replace($d, '', $s); // Hilangkan karakter yang telah disebutkan di array $d $s = strtolower(str_replace($c, '-', $s)); // Ganti spasi dengan tanda - dan ubah hurufnya menjadi kecil semua return $s; } ?>
2. Simpan dengan nama seo.php dan letakkan di dalam folder function.
Gambar 8.23 Fungsi SEO sudah berhasil dibuat
8.3 Proses Query untuk Frontend Salah satu kelebihan pemrograman PHP, dapat ditanamkan (embed) di
antara tag HTML. Untuk menanamkan kode PHP pun relatif mudah dan
dapat diatur sesuai kebutuhan. Selain dapat ditanamkan, PHP juga dapat
“memanggil” tag HTML. Artinya, tidak ada masalah apapun ketika
menggunakan PHP murni untuk membangun sebuah aplikasi maupun
Yang terpenting adalah format file harus tersimpan dalam .php bukan
.html. Jadi, dokumen yang sudah dibuat sebelumnya dalam format html
harus disimpan dalam format php agar kode php dapat berfungsi dengan
baik.
1. Buka file index.html kemudian simpan dokumen tersebut dalam
format index.php
Gambar 8.24 Mengubah file index.html menjadi index.php
2. Kita memiliki dua buah file index, yaitu index.html dan index.php.
Keduanya dapat berfungsi. Pertanyaannya, mana yang lebih dulu
dieksekusi diantara kedua file tersebut? Jawabnya, index.html.
Meskipun kita memiliki beberapa file index.html, index.php,
index.asp, index.cfm, dll sudah pasti yang dieksekusi pertama kali
adalah index.html. Jika tidak ditemukan index.html maka akan yang
dijalankan adalah index.php. Oleh karena itu, ganti nama index.html
menjadi index2.html agar yang dijalankan adalah index.php.
Gambar 8.25 Mengubah file index.html menjadi index2.html
175
3. Sebelum melakukan query, sisipkan file koneksi dalam file index.php
dengan perintah include. Letakkan kode php paling atas, setelah tag
<body>. Simpan file tersebut.
Gambar 8.26 Menyisipkan file lain dengan metode INCLUDE
8.3.1 Menampilkan Top Menu 1. Tambahkan sintaks php setelah tag <ul class=nav navbar-...>.
Gambar 8.27 Membuat sintaks PHP
2. Buatlah variabel baru untuk menyimpan data, misal $cat kemudian
lakukan perintah SQL untuk memilih semua kategori dengan
perintah SELECT. Tampilkan nama kategori secara berurutan dari A
– Z (Ascending) dengan perintah ORDER BY.
<?php $cat = mysql_query("SELECT * FROM kategori ORDER BY nama_kategori"); ?>
3. Setelah berhasil memilih tabel kategori, ambil data array yang
tersimpan dalam tabel tersebut.
<?php $cat = mysql_query("SELECT * FROM kategori ORDER BY nama_kategori");
176
while($rcat = mysql_fetch_array($cat)) { }
4. Oleh karena top menu ditampilkan dengan huruf kapital (uppercase),
sedangkan data yang diinput belum tentu huruf kapital maka harus
dikonversi agar semua huruf menjadi kapital.
while($rcat = mysql_fetch_array($cat)) { //Konversi menjadi huruf kapital @$capcat = strtoupper($rcat[nama_kategori]); }
5. Tambahkan tag <li> dengan perintah echo untuk menampilkan data.
//Konversi menjadi huruf kapital @$capcat = strtoupper($rcat[nama_kategori]); echo "<li class='dropdown'>"; echo "</li>";
6. Letakkan variabel yang menyimpan data list nama kategori setelah tag
<li class=dropdown>.
//Konversi menjadi huruf kapital @$capcat = strtoupper($rcat[nama_kategori]); echo "<li class='dropdown'> <a href=$rcat[id_kategori] data-toggle='dropdown'>$capcat<span class='caret'></span></a>";
7. Sekarang buatlah variabel baru dan lakukan query untuk mengambil
sub menu dari tabel submenu.
<a href=$rcat[id_kategori] data-toggle='dropdown'>$capcat<span class='caret'></span></a>"; $sub = mysql_query("SELECT a.* FROM subkategori a, kategori b WHERE a.id_kategori = b.id_kategori AND b.id_kategori ='$rcat[id_kategori]'");
8. Setelah berhasil memilih tabel sub menu, ambil semua data array.
$sub = mysql_query("SELECT a.* FROM subkategori a, kategori b WHERE a.id_kategori = b.id_kategori AND b.id_kategori ='$rcat[id_kategori]'"); echo "<ul class='dropdown-menu'>";
9. Berikut script lengkap untuk menampilkan top menu secara dinamis
yang diambil dari tabel kategori dan sub kategori.
<?php
$cat = mysql_query("SELECT * FROM kategori ORDER BY nama_kategori"); while($rcat = mysql_fetch_array($cat)) { //Konversi menjadi huruf kapital @$capcat = strtoupper($rcat[nama_kategori]); echo "<li class='dropdown'> <a href=$rcat[id_kategori] data-toggle='dropdown'>$capcat<span class='caret'></span></a>"; $sub = mysql_query("SELECT a.* FROM subkategori a, kategori b WHERE a.id_kategori = b.id_kategori AND b.id_kategori ='$rcat[id_kategori]'"); echo "<ul class='dropdown-menu'>"; while($rsub = mysql_fetch_array($sub)) {
return $filter; } $username = anti_injection($_POST['username']); $pass = anti_injection(md5($_POST['password'])); // pastikan username dan password adalah berupa huruf atau angka. if (!ctype_alnum($username) OR !ctype_alnum($pass)){ echo "Anda tidak bisa menginjeksi."; } else{
$login=mysql_query("SELECT * FROM user WHERE username='$username' AND password='$pass'"); $ketemu=mysql_num_rows($login); $r=mysql_fetch_array($login);
// Apabila username dan password ditemukan if ($ketemu > 0){
214
session_start(); $_SESSION['iduser'] = $r['id_user']; $_SESSION['username'] = $r['username']; $_SESSION['passuser'] = $r['password']; $_SESSION['fullname'] = $r['fullname']; $_SESSION['foto'] = $r['foto_user']; $sid_lama = session_id(); session_regenerate_id(); $sid_baru = session_id(); mysql_query("UPDATE user SET id_session='$sid_baru' WHERE username='$username'"); header('location:dashboard.php?modul=home'); } // Apabila username dan password TIDAK ditemukan else{ echo "<link href=css/style.css rel=stylesheet type=text/css>"; echo "<br><br><center><h1>LOGIN GAGAL! </h1><br> <h2>Username / Password Anda tidak benar</h2> <h3>Atau account Anda sedang diblokir</h3><br><br>"; echo "<a href=index.php><h2><b>ULANGI LAGI</b></h2></a></center>"; } } ?> </body> </html>
8. Sekarang uji script tersebut, akses halaman login kemudian masukkan
username dan password apa saja. Jika username atau password salah,
maka akan muncul pesan seperti berikut.
Gambar 9.22 Tampilan pesan jika username atau password salah
9. Perhatikan baris header('location:dashboard.php?modul=home');
maksudnya apabila username dan password sesuai maka akan
diarahkan ke file dashboard.php?modul=home seperti nampak pada
gambar berikut.
215
Gambar 9.23 Tampilan dashboard jika berhasil Login
10. Variabel global $_SESSION[] digunakan untuk menyimpan dalam
sebuah memori komputer, dan ketika dibutuhkan dapat dipanggil
kembali. Secara analogi, variabel global tersebut berfungsi sebagai
passport atau tanda pengenal. Data yang tersimpan dalam variabel
global akan terus digunakan selama belum keluar (Logout). Nama
variabel global bisa ditentukan secara bebas, namun hal yang tidak
boleh diubah adalah nama indeks data array dari database
($r[id_user], $r[username], dan lain seterusnya) harus sesuai dengan
nama kolom yang ada dalam tabel user.
9.5 Membuat Dashboard Dashboard berisi konten dan menu yang dapat dipilih untuk menuju
sebuah halaman tertentu. Menu Berita akan menampilkan daftar berita
yang sudah dimasukkan, tombol untuk input berita baru, tombol untuk
mengedit atau menghapus berita, dan beberapa fungsi lainnya.
Ketika memilih sebuah menu, maka akan diarahkan ke sebuah halaman
lain. Dalam studi kasus ini, Penulis akan memberikan teknik membuat
modul Berita (input, edit, update, dan delete). Untuk modul-modul lain,
silakan dikembangkan sendiri sebagai latihan.
1. Pertama kali, buka file dashboard.php kemudian ketik script berikut
dan letakkan pada area konten.
216
<div id="content" class="span10"> <!-- content starts --> <div> <ul class="breadcrumb" class='nav nav-pills nav-stacked'> <li> <a href="dashboard.php?modul=home"><h3>DASHBOARD</h3></a> </li> </ul> <div> <?php $m = $_GET['modul']; //Ini ditampilkan pertama kali ketika berhasil Login if($m=='home') {
echo "SELAMAT DATANG <b>$_SESSION[fullname] </b>"; echo "<br><br>"; echo "<p>Silakan memilih salah satu menu yang ada di sebeleh kiri untuk mengelola</p>";
} //Ini untuk memanggil modul berita elseif($m=='berita'){
include "modul/berita.php"; } //Ini untuk memanggil modul kategori elseif($m=='kategori'){ echo "Halaman Kategori"; } //Ini untuk memanggil modul subkategori elseif($m=='sub-kategori'){ echo "Halaman Sub Kategori"; } //Ini untuk memanggil modul subsubkategori elseif($m=='subsub-kategori'){ echo "Halaman Sub-sub Kategori"; } //Ini untuk memanggil modul fitur elseif($m=='fitur'){ echo "Halaman Fitur"; } //Ini untuk memanggil modul user elseif($m=='user'){ echo "Halaman User"; } //Ini akan ditampilkan jika modul tidak ditemukan else{ echo "Halaman yang dicari tidak ditemukan"; }
2. Ujilah script tersebut dengan cara login terlebih dulu. Jika sudah
berhasil login, maka akan muncul pesan error. Hal ini dikarenakan
file dashboard.php belum mengaktifkan session yang berfungsi untuk
menyimpan variabel global $_SESSION. Untuk mengatasinya,
tambahkan script berikut pada awal baris.
<body> <?php include "../config/config_db.php"; include "../function/word_limit.php"; include "../function/tanggal_indo.php"; session_start(); if (empty($_SESSION['username']) AND empty($_SESSION['passuser'])){
echo "<center><h2>Untuk mengakses modul</h2> <h1>Anda harus login</h1><br>"; echo "<a href=index.php><h3>LOGIN</b></h3></center>";
} else{ ?> <!-- topbar starts -->
3. Kurung kurawal pada kondisi else { harus ditutup pada baris paling
akhir.
<?php } ?> </body> </html>
4. Jika sudah selesai simpan file, lalu pilih menu secara bergantian.
Perhatikan alamat URL dan konten yang ditampilkan. Semua menu
sudah berfungsi, kecuali menu Berita akan menghasilkan pesan error
karena file berita.php tidak ditemukan.
218
Gambar 9.24 Memeriksa menu dan alamat URL
5. Untuk mempermudah dalam praktek, harus dibuatkan menu Logout.
Modifikasi beberapa baris berikut, perhatikan teks dengan huruf
tebal.
<!-- user dropdown starts --> <div class="btn-group pull-right" >
6. Agar program berjalan normal, Anda harus memasukkan sebuah file
gambar yang tersimpan dalam folder assets/images.
Gambar 9.25 Menyiapkan foto untuk profil user
219
7. Nama file gambar harus dimasukkan dalam database. Masukkan
nama file gambar pada kolom foto_user.
Gambar 9.26 Memasukkan nama file gambar pada kolom foto_user
8. Lihatlah hasilnya di browser.
Gambar 9.27 Tampilan foto profil user
9. Terakhir, buatlah file baru dengan nama logout.php dan simpan
dalam folder adminweb. Ketikkan script berikut.
<?php session_start(); session_destroy(); echo "<script>alert('Anda telah keluar dari halaman administrator'); window.location = '../adminweb/index.php'</script>"; ?>
9.6 Membuat Modul Berita Ada banyak cara untuk membuat modul berita. Dengan memanfaatkan
statement if-elseif atau switch dapat berisi beberapa kondisi dalam sebuah
file. Kondisi input, save, edit, update maupun delete dapat diatur
menggunakan statemen if-elseif atau swicth secara dinamis. Bagi seorang
programmer pemula, mungkin akan membuat beberapa file sesuai
220
kondisi, misal: berita-input.php, berita-simpan.php, dan seterusnya.
Banyaknya file tersebut tidak menggunakan statemen, namun hanya
mengarahkan ke sebuah file. Pada bagian ini, kita akan membuat modul
berita dengan memanfaatkan statemen if-elseif.
1. Pertama kali, buatlah folder dengan nama modul yang berada di
bawah responsive/adminweb. Kemudian buatlah file baru dengan
nama berita.php dan simpan dalam folder modul.
Gambar 9.28 Membuat file baru untuk modul berita
2. Sebagai langkah awal, ketikkan script berikut.
<?php @$act = $_GET['aksi']; //Halaman form input baru if($act=='add'){ } //Script untuk menyimpan hasil input elseif($act=='simpan'){ } //Script untuk edit berita elseif($act=='edit'){ } //Script untuk update berita elseif($act=='update'){ } //Script untuk menghapus elseif($act=='delete'){ }
221
//Script untuk menampilkan semua berita else{ } ?>
3. Penjelasannya, baris @$act = $_GET['aksi']; maksudnya sebuah
indeks yang ditemukan pada alamat URL modul=berita&aksi=add.
Baris &aksi disimpan sebagai variabel global dengan indeks=aksi.
Variabel $act hanya menyederhanakan bentuk variabel global
tersebut agar script tidak terlalu panjang.
9.6.1 Menampilkan Daftar Berita 1. Fokus pada bagian untuk menampilkan semua berita. Sebagai
langkah awal, buatlah tabel terlebih dulu kemudian masukkan sebuah
data yang diketik secara manual untuk mengisi kolom judul berita, isi
berita, kategori, dan seterusnya sesuai jumlah kolom.
//Script untuk menampilkan semua berita else { echo "