Country Code (ISO 3166-1 alpha-2)

Thursday, December 24, 2015

Senarai kod beserta nama negara di dalam array

<?php
$negara = array(
    'AF' => 'Afghanistan',
    'AX' => 'Aland Islands',
    'AL' => 'Albania',
    'DZ' => 'Algeria',
    'AS' => 'American Samoa',
    'AD' => 'Andorra',
    'AO' => 'Angola',
    'AI' => 'Anguilla',
    'AQ' => 'Antarctica',
    'AG' => 'Antigua and Barbuda',
    'AR' => 'Argentina',
    'AM' => 'Armenia',
    'AW' => 'Aruba',
    'AU' => 'Australia',
    'AT' => 'Austria',
    'AZ' => 'Azerbaijan',
    'BS' => 'Bahamas',
    'BH' => 'Bahrain',
    'BD' => 'Bangladesh',
    'BB' => 'Barbados',
    'BY' => 'Belarus',
    'BE' => 'Belgium',
    'BZ' => 'Belize',
    'BJ' => 'Benin',
    'BM' => 'Bermuda',
    'BT' => 'Bhutan',
    'BO' => 'Bolivia',
    'BQ' => 'Bonaire, Saint Eustatius and Saba',
    'BA' => 'Bosnia and Herzegovina',
    'BW' => 'Botswana',
    'BV' => 'Bouvet Island',
    'BR' => 'Brazil',
    'IO' => 'British Indian Ocean Territory',
    'VG' => 'British Virgin Islands',
    'BN' => 'Brunei',
    'BG' => 'Bulgaria',
    'BF' => 'Burkina Faso',
    'BI' => 'Burundi',
    'KH' => 'Cambodia',
    'CM' => 'Cameroon',
    'CA' => 'Canada',
    'CV' => 'Cape Verde',
    'KY' => 'Cayman Islands',
    'CF' => 'Central African Republic',
    'TD' => 'Chad',
    'CL' => 'Chile',
    'CN' => 'China',
    'CX' => 'Christmas Island',
    'CC' => 'Cocos Islands',
    'CO' => 'Colombia',
    'KM' => 'Comoros',
    'CK' => 'Cook Islands',
    'CR' => 'Costa Rica',
    'HR' => 'Croatia',
    'CU' => 'Cuba',
    'CW' => 'Curacao',
    'CY' => 'Cyprus',
    'CZ' => 'Czech Republic',
    'CD' => 'Democratic Republic of the Congo',
    'DK' => 'Denmark',
    'DJ' => 'Djibouti',
    'DM' => 'Dominica',
    'DO' => 'Dominican Republic',
    'TL' => 'East Timor',
    'EC' => 'Ecuador',
    'EG' => 'Egypt',
    'SV' => 'El Salvador',
    'GQ' => 'Equatorial Guinea',
    'ER' => 'Eritrea',
    'EE' => 'Estonia',
    'ET' => 'Ethiopia',
    'FK' => 'Falkland Islands',
    'FO' => 'Faroe Islands',
    'FJ' => 'Fiji',
    'FI' => 'Finland',
    'FR' => 'France',
    'GF' => 'French Guiana',
    'PF' => 'French Polynesia',
    'TF' => 'French Southern Territories',
    'GA' => 'Gabon',
    'GM' => 'Gambia',
    'GE' => 'Georgia',
    'DE' => 'Germany',
    'GH' => 'Ghana',
    'GI' => 'Gibraltar',
    'GR' => 'Greece',
    'GL' => 'Greenland',
    'GD' => 'Grenada',
    'GP' => 'Guadeloupe',
    'GU' => 'Guam',
    'GT' => 'Guatemala',
    'GG' => 'Guernsey',
    'GN' => 'Guinea',
    'GW' => 'Guinea-Bissau',
    'GY' => 'Guyana',
    'HT' => 'Haiti',
    'HM' => 'Heard Island and McDonald Islands',
    'HN' => 'Honduras',
    'HK' => 'Hong Kong',
    'HU' => 'Hungary',
    'IS' => 'Iceland',
    'IN' => 'India',
    'ID' => 'Indonesia',
    'IR' => 'Iran',
    'IQ' => 'Iraq',
    'IE' => 'Ireland',
    'IM' => 'Isle of Man',
    'IL' => 'Israel',
    'IT' => 'Italy',
    'CI' => 'Ivory Coast',
    'JM' => 'Jamaica',
    'JP' => 'Japan',
    'JE' => 'Jersey',
    'JO' => 'Jordan',
    'KZ' => 'Kazakhstan',
    'KE' => 'Kenya',
    'KI' => 'Kiribati',
    'XK' => 'Kosovo',
    'KW' => 'Kuwait',
    'KG' => 'Kyrgyzstan',
    'LA' => 'Laos',
    'LV' => 'Latvia',
    'LB' => 'Lebanon',
    'LS' => 'Lesotho',
    'LR' => 'Liberia',
    'LY' => 'Libya',
    'LI' => 'Liechtenstein',
    'LT' => 'Lithuania',
    'LU' => 'Luxembourg',
    'MO' => 'Macao',
    'MK' => 'Macedonia',
    'MG' => 'Madagascar',
    'MW' => 'Malawi',
    'MY' => 'Malaysia',
    'MV' => 'Maldives',
    'ML' => 'Mali',
    'MT' => 'Malta',
    'MH' => 'Marshall Islands',
    'MQ' => 'Martinique',
    'MR' => 'Mauritania',
    'MU' => 'Mauritius',
    'YT' => 'Mayotte',
    'MX' => 'Mexico',
    'FM' => 'Micronesia',
    'MD' => 'Moldova',
    'MC' => 'Monaco',
    'MN' => 'Mongolia',
    'ME' => 'Montenegro',
    'MS' => 'Montserrat',
    'MA' => 'Morocco',
    'MZ' => 'Mozambique',
    'MM' => 'Myanmar',
    'NA' => 'Namibia',
    'NR' => 'Nauru',
    'NP' => 'Nepal',
    'NL' => 'Netherlands',
    'NC' => 'New Caledonia',
    'NZ' => 'New Zealand',
    'NI' => 'Nicaragua',
    'NE' => 'Niger',
    'NG' => 'Nigeria',
    'NU' => 'Niue',
    'NF' => 'Norfolk Island',
    'KP' => 'North Korea',
    'MP' => 'Northern Mariana Islands',
    'NO' => 'Norway',
    'OM' => 'Oman',
    'PK' => 'Pakistan',
    'PW' => 'Palau',
    'PS' => 'Palestinian Territory',
    'PA' => 'Panama',
    'PG' => 'Papua New Guinea',
    'PY' => 'Paraguay',
    'PE' => 'Peru',
    'PH' => 'Philippines',
    'PN' => 'Pitcairn',
    'PL' => 'Poland',
    'PT' => 'Portugal',
    'PR' => 'Puerto Rico',
    'QA' => 'Qatar',
    'CG' => 'Republic of the Congo',
    'RE' => 'Reunion',
    'RO' => 'Romania',
    'RU' => 'Russia',
    'RW' => 'Rwanda',
    'BL' => 'Saint Barthelemy',
    'SH' => 'Saint Helena',
    'KN' => 'Saint Kitts and Nevis',
    'LC' => 'Saint Lucia',
    'MF' => 'Saint Martin',
    'PM' => 'Saint Pierre and Miquelon',
    'VC' => 'Saint Vincent and the Grenadines',
    'WS' => 'Samoa',
    'SM' => 'San Marino',
    'ST' => 'Sao Tome and Principe',
    'SA' => 'Saudi Arabia',
    'SN' => 'Senegal',
    'RS' => 'Serbia',
    'SC' => 'Seychelles',
    'SL' => 'Sierra Leone',
    'SG' => 'Singapore',
    'SX' => 'Sint Maarten',
    'SK' => 'Slovakia',
    'SI' => 'Slovenia',
    'SB' => 'Solomon Islands',
    'SO' => 'Somalia',
    'ZA' => 'South Africa',
    'GS' => 'South Georgia and the South Sandwich Islands',
    'KR' => 'South Korea',
    'SS' => 'South Sudan',
    'ES' => 'Spain',
    'LK' => 'Sri Lanka',
    'SD' => 'Sudan',
    'SR' => 'Suriname',
    'SJ' => 'Svalbard and Jan Mayen',
    'SZ' => 'Swaziland',
    'SE' => 'Sweden',
    'CH' => 'Switzerland',
    'SY' => 'Syria',
    'TW' => 'Taiwan',
    'TJ' => 'Tajikistan',
    'TZ' => 'Tanzania',
    'TH' => 'Thailand',
    'TG' => 'Togo',
    'TK' => 'Tokelau',
    'TO' => 'Tonga',
    'TT' => 'Trinidad and Tobago',
    'TN' => 'Tunisia',
    'TR' => 'Turkey',
    'TM' => 'Turkmenistan',
    'TC' => 'Turks and Caicos Islands',
    'TV' => 'Tuvalu',
    'VI' => 'U.S. Virgin Islands',
    'UG' => 'Uganda',
    'UA' => 'Ukraine',
    'AE' => 'United Arab Emirates',
    'GB' => 'United Kingdom',
    'US' => 'United States',
    'UM' => 'United States Minor Outlying Islands',
    'UY' => 'Uruguay',
    'UZ' => 'Uzbekistan',
    'VU' => 'Vanuatu',
    'VA' => 'Vatican',
    'VE' => 'Venezuela',
    'VN' => 'Vietnam',
    'WF' => 'Wallis and Futuna',
    'EH' => 'Western Sahara',
    'YE' => 'Yemen',
    'ZM' => 'Zambia',
    'ZW' => 'Zimbabwe',
);
?>


Papar semua data
<?php
foreach($negara as $kod => $nama) {
  echo "$kod untuk $nama";
}
?>


Papar value mengikut specific key
<?php
echo $negara['MY'];
//result: Malaysia
?>

Alternatif Visio

Tuesday, September 15, 2015

Jika tiada Microsoft Visio, boleh guna alternatif

UMLet - http://www.umlet.com/

yED - https://www.yworks.com/

Dapatkan Value Untuk Modal (Bootstrap)

Tuesday, August 04, 2015

Andaikan kita ada berpuluh data dalam satu table, pilih satu untuk dipaparkan detailnya pada modal. Caranya dengan menggunakan jquery.

Disebabkan nak guna jquery, jadi include jquery.js adalah wajib.

Contohnya, pada setiap baris data, kita sediakan butang Hapus. Apabila klik butang hapus, sistem akan paparkan confirmation dengan detail data yang ingin dipadamkan itu.

Untuk memaparkan confirmation page, kita boleh gunakan modal. Untuk dapatkan maklumat paparan, kita gunakan javascript code. Jadi, di bawah ini adalah contoh butang hapus dalam baris data tersebut.

<td><a href="#grid-config" class="open-DelData btn btn-success" data-toggle="modal" data-id="<?php echo $row['pekerja_id']; ?>" data-nama="<?php echo $row['pekerja_nama']; ?>">Hapus</a></td>

Jika dilihat pada <a> ini, kita nampak href, class, data-toggle, dan beberapa attribute data-xxx.

href="#grid-config" Ini akan panggil modal, <div class="modal"...> yang menggunakan ID 'grid-config'. Contoh modal, <div class="modal" role="dialog" id="grid-config">

class="open-DelData btn btn-success" class biasanya panggil css. Jadi, untuk btn dan btn-success tu memang dari css. Tapi untuk class open-DelData, itu rekaan sendiri sahaja, tiada dalam css. class ini yang akan kita gunakan nanti pada jquery selector. Sekiranya tidak mahu guna class, boleh gunakan ID. Di javascript nanti, gunakan tanda # (untuk kes ID). Manakala tanda . untuk kes class. Cuma, bila data row berulang, ID dipanggil secara terus tidak sesuai digunakan kerana ID perlu unik. Jika tidak, ia akan ambil data pada row pertama, atau error.

Kita sentuh bab ID ini di post JQuery Selector ID Berulang.

data-toggle="modal" ini standard untuk panggil modal.

data-id="<?php echo $row['kr_kontrak_id']; ?>" dan data-nama="<?php echo $row['pekerja_nama']; ?>" dalam <a> yang sama, kita boleh cipta seberapa banyak data-xxx. Data inilah yang akan kita paparkan pada modal. JQuery automatik mengenali variable bermula dengan data- tersebut.

Bila pengguna klik <a> butang hapus tadi, sistem akan panggil modal di bawah
<div class="modal fade" role="dialog" id="grid-config">
  <div class="modal-dialog">
 <div class="modal-content">
 <form action="delete.php" method="post">
   <div class="modal-header">
  <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  <h4 class="modal-title warna">Hapus Data</h4>
   </div>
   <div class="modal-body">
  <p>Anda pasti untuk menghapuskan data pekerja ini?</p>
  <input type="text" name="dataUID" id="dataUID" value="">
  <input type="text" name="dataNAMA" id="dataNAMA" value="">
  <p id="namaStaff"></p>
   </div>
   <div class="modal-footer">
  <button type="button" class="btn btn-default" data-dismiss="modal">Tidak</button>
  <input type="submit" class="btn btn-success" value="Ya">
   </div>
 </form>
 </div>
  </div>
</div>

Kita lihat, div modal ini menggunakan id=grid-config. Manakala data kita panggil menggunakan input type=text dan idnya = dataUID dan dataNAMA.

dataUID dan dataNAMA ini belum boleh dipanggil. Perlu panggil menggunakan jquery terlebih dahulu. Selain panggil jquery.js terlebih dahulu, perlu juga panggil $(document).ready(); selepas itu.


<script src="jquery-1.8.3.min.js" type="text/javascript"></script>

<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
 $(".open-DelData").click(function(){
  $("#dataUID").val($(this).data('id'));
  $("#dataNAMA").val($(this).data('nama'));
  $("#namaStaff").text($(this).data('nama'));
 })
} );
</script>

Di sinilah kita akan gunakan class pada tadi, iaitu open-DelData dengan cara (".open-DelData").click().

Di sini kita declare dataUID dan dataNAMA dan berikan nilai pada mereka dengan cara dapatkan value dari data-id dan data-nama tadi. Caranya dengan $("#dataUID").val($(this).data('id'));

Kita dapat lihat, val($(this).data('id')); tidak memanggil data(data-id), sebaliknya, data(id) sahaja. Ini kerana jquery telah mengenalpasti melalui attribute data- itu tadi. Sekarang, #dataUID sudah ada value. Cuma panggil dataUID sahaja pada <input /> dalam modal tadi.

Selain cara di atas, boleh juga cara yang lebih tersusun, satu-persatu seperti di bawah.

<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
 $(document).on("click", ".open-DelData", function () {
   var uid = $(this).data('id');
   $(".modal-body #dataUID").val(uid);
 });
} );
</script>

Atau lebih pendek seperti contoh asal di atas tadi, tetapi beritahu untuk modal-body. Contoh,
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
 $(".open-DelData").click(function(){
  $(".modal-body #dataUID").val($(this).data('id'));
 })
} );
</script>

Contoh sekiranya kita tidak gunakan class, tetapi guna id pada <a> tadi.

<td><a href="#grid-config" id="confirm-DelData" class="btn btn-success" data-toggle="modal" data-id="<?php echo $row['pekerja_id']; ?>" data-nama="<?php echo $row['pekerja_nama']; ?>">Hapus</a></td>
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
 $("#confirm-DelData").click(function(){
  $("#dataUID").val($(this).data('id'));
 })
} );
</script>

Perhatikan, $("#confirm-DelData") adalah ID di <a> tadi. Bukan $(".open-DelData") yang menggunakan class. Tetapi tidak sesuai digunakan dalam kes ini. Contoh ini untuk tujuan kefahaman sahaja. Boleh lihat pada post yang menyentuh isu ini. [Jquery Seletor ID berulang]

Selain dari guna $(this).data('id'), boleh juga panggil guna attribute seperti di bawah.

var item = $(this).attr('data-id');


Contoh lengkap


<?php
include('config.php');
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<meta charset="utf-8" />
<title>Senarai Pekerja</title>
<link href="assets/plugins/jquery-datatable/css/jquery.dataTables.css" rel="stylesheet" type="text/css"/>
<link href="assets/plugins/datatables-responsive/css/datatables.responsive.css" rel="stylesheet" type="text/css" media="screen"/>
<link href="assets/plugins/boostrapv3/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
<link href="assets/css/style.css" rel="stylesheet" type="text/css"/>
</head>

<body class="">
<div class="header navbar navbar-inverse">
<h1>Senarai Pekerja</h1>
</div>

<div class="container">

  <div class="container">
    <div class="clearfix"></div>

    <div class="modal fade"  tabindex="-1" role="dialog" aria-hidden="true" id="grid-config">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h4 class="modal-title warna">Hapus Data</h4>
          </div>
          <div class="modal-body">
            <p>Anda pasti untuk menghapuskan data pekerja ini?</p>
   <input type="text" name="dataUID" id="dataUID" value="">
   <input type="text" name="dataNAMA" id="dataNAMA" value="">
   <p id="namaStaff"></p>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Tidak</button>
            <button type="button" class="btn btn-success" data-dismiss="modal">Ya</button>
          </div>
        </div>
      </div>
    </div>

    <div class="content">

 <div class="page-title">
        <h3>Senarai <span class="semi-bold">Pekerja</span></h3>
      </div>
      <div class="row-fluid">
        <div class="span12">
          <div class="grid simple ">
            <div class="grid-title">
              <h4 class="warna">Senarai <span class="semi-bold">Pekerja</span></h4>
            </div>
            <div class="grid-body ">
              <table class="table table-hover table-striped table-condensed" id="example">
                <thead>
                  <tr>
                    <th style="width:1%">No.</th>
                    <th style="width:5%" data-hide="phone,tablet">Kategori</th>
                    <th style="width:25%">Nama Pekerja</th>
                    <th style="width:8%">Nilai Pendapatan (RM)</th>
                    <th style="width:10%" data-hide="phone,tablet">Tindakan</th>
                  </tr>
                </thead>
                <tbody>
<?php
$res = mysqli_query($con, "SELECT * FROM pekerja");
if($res)
{
    $bil = 1;
    while($row = mysqli_fetch_assoc($res))
    {
  echo "<tr>";
        echo "<td>".$bil.".</td>";
  echo "<td>".$row['kategori_pekerja']."</td>";
  echo "<td>".$row['pekerja_nama']."</td>";
  echo "<td>".number_format($row['jumlah_gaji'], 2)."</td>";
  echo "<td><a href=\"editpekerja.php?id=".$row['no_id']."\" class=\"btn btn-success btn-sm btn-small\">Kemaskini</a>&nbsp;";
  echo "<a href=\"#grid-config\" id=\"confirm-DelData\" class=\"open-DelData btn btn-success btn-sm btn-small\" data-toggle=\"modal\" data-id=\"".$row['no_id']."\" data-nama=\"".$row['pekerja_nama']."\">Hapus</a></td>";
  echo "</tr>";
        $bil++;
    }
}
?>    
                </tbody>
              </table>

            </div>
          </div>
        </div>
      </div>
   
    </div>
  </div>
</div>

<script src="assets/plugins/jquery-1.8.3.min.js" type="text/javascript"></script>
<script src="assets/plugins/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="assets/plugins/jquery-datatable/js/jquery.dataTables.min.js" type="text/javascript" ></script>
<script src="assets/plugins/jquery-datatable/extra/js/TableTools.min.js" type="text/javascript" ></script>
<script src="assets/js/datatables.js" type="text/javascript"></script>

<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
/* $("#confirm-DelData").click(function(){
  $("#dataUID").val($(this).data('id'));
 });
*/ 
/* $(document).on("click", ".open-DelData", function () {
   var uid = $(this).data('id');
   $(".modal-body #dataUID").val(uid);
 });
*/
 $(".open-DelData").click(function(){
  //$(".modal-body #dataUID").val($(this).data('id'));
  $("#dataUID").val($(this).data('id'));
  $("#dataNAMA").val($(this).data('nama'));
  //$("#namaStaff").text($(this).data('nama'));
  $("#namaStaff").html('Nama Pekerja: <strong>'+$(this).data('nama')+'</strong>');
 });
});

</script>
</body>
</html>

YouTube Data API v3 Video List

Wednesday, July 22, 2015

Ini khas untuk youtube API version 3. Version lain, mungkin lain caranya.

Sebelum nak guna youtube API, perlu create API key dulu guna akaun google sendiri. Pastikan API Key tu aktif. Lepas create, aktifkan.

Rujuk : Youtube Data API

Pada localhost, create satu file php, dan panggil API.

Dalam API ni ada macam-macam fungsi yang berlainan. Boleh rujuk nota bawah tajuk implementation guide. Salah satu adalah videolist.

Contoh kod di bawah,

<?php 
$API_key = 'blablablabla';
$maxResults = 3;

$videoDetail = json_decode(file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&id=eSwisMEtkBg&key='.$API_key));

print_r($videoDetail);
?>

Andaikan kita dah tahu id video tu, iaitu bfNXb6-fVaM. Tinggal masukkan je dalam request url API.

Pada print_r tu, kita akan dipaparkan result. Jika nak tengok kemas sikit, klik kanan pada page, "View Page Source".

Kita akan dapat lihat result macam ni.

stdClass Object
(
    [kind] => youtube#videoListResponse
    [etag] => "XI7nbFXulYBIpL0ayR_gDh3eu1k/PEcLptKFhu_YmtNgJBdRp5Bp1G8"
    [pageInfo] => stdClass Object
        (
            [totalResults] => 1
            [resultsPerPage] => 1
        )

    [items] => Array
        (
            [0] => stdClass Object
                (
                    [kind] => youtube#video
                    [etag] => "XI7nbFXulYBIpL0ayR_gDh3eu1k/4VEv7O0M0DyhqZy4Ylw7JfD_4Nk"
                    [id] => bfNXb6-fVaM
                    [snippet] => stdClass Object
                        (
                            [publishedAt] => 2017-02-14T17:13:42.000Z
                            [channelId] => UCY_jsmgpHvnYkvT5xTrEEJw
                            [title] => Mummy Birthday 2017
                            [description] => 
                            [thumbnails] => stdClass Object
                                (
                                    [default] => stdClass Object
                                        (
                                            [url] => https://i.ytimg.com/vi/bfNXb6-fVaM/default.jpg
                                            [width] => 120
                                            [height] => 90
                                        )

                                    [medium] => stdClass Object
                                        (
                                            [url] => https://i.ytimg.com/vi/bfNXb6-fVaM/mqdefault.jpg
                                            [width] => 320
                                            [height] => 180
                                        )

                                    [high] => stdClass Object
                                        (
                                            [url] => https://i.ytimg.com/vi/bfNXb6-fVaM/hqdefault.jpg
                                            [width] => 480
                                            [height] => 360
                                        )

                                )

                            [channelTitle] => Mohd Firdaus Mohd Rasidi
                            [categoryId] => 22
                            [liveBroadcastContent] => none
                            [localized] => stdClass Object
                                (
                                    [title] => Mummy Birthday 2017
                                    [description] => 
                                )

                            [defaultAudioLanguage] => ms
                        )

                    [contentDetails] => stdClass Object
                        (
                            [duration] => PT2M11S
                            [dimension] => 2d
                            [definition] => sd
                            [caption] => false
                            [licensedContent] => 
                            [projection] => rectangular
                        )

                    [statistics] => stdClass Object
                        (
                            [viewCount] => 463
                            [likeCount] => 3
                            [dislikeCount] => 0
                            [favoriteCount] => 0
                            [commentCount] => 0
                        )

                )

        )

)


Memandangkan ianya diconvert ke json, dan arraynya cuma satu data sahaja, tidak perlu guna foreach. Direct je panggil. Contoh.
<?php 
echo "<br>1.".$videoDetail->etag; //1."XI7nbFXulYBIpL0ayR_gDh3eu1k/PEcLptKFhu_YmtNgJBdRp5Bp1G8"
echo "<br>2.".$videoDetail->pageInfo->totalResults; //2.1
echo "<br>3.".$videoDetail->{'items'}[0]->{'statistics'}->{'viewCount'}; //3.463
?>


Code penuh.

<?php 
$API_key = 'AIzaScBb1zAdNEaqjDZ2GuiyEGy9ekXtG0q_WDm'; // <- key palsu sebagai contoh sahaja.

$videoDetail = json_decode(file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&id=bfNXb6-fVaM&key='.$API_key));

//print_r($videoDetail);

echo "<br>1.".$videoDetail->etag; //1."XI7nbFXulYBIpL0ayR_gDh3eu1k/PEcLptKFhu_YmtNgJBdRp5Bp1G8"
echo "<br>2.".$videoDetail->pageInfo->totalResults; //2.1
echo "<br>3.".$videoDetail->{'items'}[0]->{'statistics'}->{'viewCount'}; //3.463
echo "\n\n";

?>

HTML5 Anchor Untuk Aktiviti Lain

Wednesday, April 22, 2015

Anchor dalam HTML biasanya digunakan untuk sambung ke URL atau untuk email. Kini HTML5 sudah ditambah fungsi untuk telefon dan whatsapp. Sebenarnya Whatsapp sediakan listenernya sendiri. Jadi, mana-mana aplikasi jika menyediakan listener, pasti boleh ditambah pada HTML5.

Hyperlink URL

 <a href="test.html">Klik Di Sini</a>  


Email
 <a href="mailto:email@emaildomain.com">email@emaildomain.com</a>
  


Telefon
 <a href="tel:1800886800"><img src="images/phone.png"></a>  

Untuk telefon, tidak perlu ditambah tanda plus '+' pada bahagian depan. Ianya tidak berfungsi.

Whatsapp
Ini digunakan untuk android.
 <a href="intent://send/60123456789#Intent;scheme=smsto;package=com.whatsapp;text=Bla%20bla%20bla;action=android.intent.action.SENDTO;end">Contact Us</a>  

Nombor tidak perlu ditambah '+'.

Untuk text=bla bla bla, tidak diletakkan terlebih dahulu pun tak mengapa.
 <a href="intent://send/60123456789#Intent;scheme=smsto;package=com.whatsapp;action=android.intent.action.SENDTO;end">Contact Us</a>  


Jika IOS, boleh guna
 <a href="whatsapp://send?text=blahblah">Contact Us</a>  

Hantar Email Guna Direct Access URL

Friday, April 03, 2015

Ada satu file php, iaitu sendmail.php. Di dalamnya ada email function, hardcoded. Jadi, untuk test hantar email, cuma akses file php tersebut terus melalui URL.

Bila taip di URL dan ENTER, file tidak dapat di akses.

Jadi, perlu tengok permission untuk file tersebut betul atau tidak. Sepatutnya permission-nya begini.

 # ls -l /var/www/html/sendmail.php   
 -r-xr-xr-x root smmsp /var/www/html/sendmail.php  


Kemudian, tengok pula folder clientmqueue

 # ls -l /var/spool/clientmqueue   
 drwxrwx--- smmsp smmsp /var/spool/clientmqueue  


Jika tidak sama seperti di atas, tukar guna chgrp dan chown, mana-mana yang perlu.

Contoh: Tukar group sendmail.php duduk di bawah group smmsp.

 #chgrp smmsp sendmail.php  
 chmod 555 send.php  


Nota: File ini akan jadi read-only. Jadi, tiada nak edit-edit lagi.

Kemudian, onkan http send mail. Setkan di setsebool.

Tengok status httpd_can_sendmail di getsebool

 # getsebool -a | grep mail  
 allow_postfix_local_write_mail_spool --> on  
 httpd_can_sendmail --> off  
 logging_syslogd_can_sendmail --> off  


Onkan http send mail
 # setsebool httpd_can_sendmail 1  



Sekarang, file sendmail.php sudah boleh diakses melalui URL dan email berjalan seperti biasa.

Buka browser, taip URL http://myurl.com/sendmail.php dan ENTER. Kemudian, semak inbox email.