Sunday, March 31, 2019

Cara Sekali Daftar Adsense Langsung DITERIMA - NO HOAX


Bagi seorang blogger tentu mendengar kata adsense pasti sudah membayangkan tentang uang dan kesuksesan. Hal ini dikarenakan bahwa tidak dipungkiri adsense merupakan impian yang paling diinginkan bagi setiap blogger, karena secara resmi dari google yang benar-benar membayar pada blogger untuk menampilkan iklannya. Tentu saja ini masih menjadi misteri yang masih banyak dicari bagi para blogger.

Apakah kamu seorang blogger yang sudah lama tapi ditolak terus saat mendaftar adsense dengan berbagai alasan ?

Apakah kamu ingin benar-benar diterima adsense, untuk mendapatkan penghasilan ?

Kalian berada pada artikel yang tepat.

Sudah banyak sekali cara para blogger untuk mencoba memperbaiki dan memperindah blog mereka supaya menarik minat pihak google agar diterima adsense. Berbagai cara memperbaiki konten, SEO friendly, blog walking dan lainnya namun itu belum berhasil juga.

Hal ini menjadi salah besar jika anda memprioritaskan blogger untuk adsense, Karena jika anda sudah berusaha keras dan tujuan anda tidak tercapai akan ada saatnya anda akan merasa bahwa anda menulis blog ini terasa sia-sia ini lah yang membuat orang gagal dalam blogging. Namun, jika anda memproritaskna blogging ini untuk tulisan anda, dokumentasi, ataupun karena hobi, tanpa adsense kalian akan tetap menulis blog sehingga diterima tidaknya adsense nanti itu adalah urusan belakangan, inilah yang menjadi MINDSET yang harus diubah para blogger.

Blogger harusnya menulis dengan sepenuh hati apa yang ingin dia tulis pada blog nya sehingga para pembaca dapat merasakan feel dalam membaca blog anda, sehingga google pun akan tertarik melihat blog anda.

Namun, untuk mendapatkan diterimanya dari adsense ada caranya. Dan cara ini sudah saya buktikan sendiri pada blog ini bahwa Postingan dibawah 10, pengunjung dibawah 10 per hari, umur blog kurang dari 2 minggu bisa DITERIMA dan ini TIDAK HOAX.

Tidak perlu SEO, tidak perlu pengunjung minimal 1000 perhari, tidak perlu menunggu minimal umur blog 6 bulan dll.. itu cara lama = KUNO.

Cara Sekali Daftar Adsense Langsung DITERIMA - NO HOAX

 Adapun cara yang saya gunakan sebagai berikut :

1. Jika anda benar-benar ingin diterima, buatlah sebuah blog baru dan tinggalkan blog lama kalian.
2. Niatkan karena Allah untuk mencari rejeki yang HALAL.
3. Setelah anda membuat blog yang baru, belikan domain pada blog baru tersebut. Contoh: .com .blog .id dll
4. Mulai tulisan anda dengan BENAR-BENAR mengetik pada entri blogger sehingga murni tulisan anda.
5. Coba lah untuk menulis paling tidak sampai 15 artikel. Tidak perlu dalam 1 HARI.
6. Buat sebuah Fresh email / Email BARU , BUKAN email yang dipakai untuk blog.
7. Buka situs Adsense, kemudian sign up dengan email baru tersebut.
8. Daftarkan situs blog baru yang telah anda pakaikan domain tadi.
9. Selama masa peninjauan blog anda, tulis selalu artikel setidaknya 1 hari 1 post, sehingga adsense akan menilai bahwa blog anda fresh aktif.
10. Tunggu notif Approved emailnya.

Pengalaman saya telah mencoba ini, dan berhasil benar-benar berhasil. Bukan hanya saya yang mencoba ini, teman saya pun juga telah mencoba nya dan nyata nya benar-benar berhasil.


Tuesday, March 12, 2019

Laravel CRUD dengan AJAX hanya 5 Menit

Bismillahirrahmanirrahim...

Kalau biasanya kita menggunakan laravel murni untuk ngoding, kali ini kita akan belajar bagaimana kita menggunakan ajax pada laravel. Tentu kita akan berfikir kenapa kita menggunakan Ajax ? apa itu AJAX ? kapan harus digunakan ?



Ya, tentu saja pikiran itu pasti muncul ketika disuguhkan dengan sesuatu yang baru apalagi sesuatu tersebut berhubungan dengan yang sedang kita lakukan atau kerjakan. Tapi jangan khawatir kita akan membahas nya satu persatu. Pertama kita kenalan apa itu AJAX.

AJAX adalah singkatan dari Asynchronous Javascript and XMLHTTP, yaitu merupakan suatu teknik pemograman berbasis web untuk menciptakan suatu web yang interaktif. 

Kenapa kita harus menggunakan AJAX ? Misalkan anda mempunyai 1000 data pada aplikasi anda dan ketika anda ingin menambahkan 1 data baru, maka AJAX tidak akan melakukan reload pada halaman web yang menyebabkan 1000 data juga akan ikut ter-reload. Tentu hal ini akan memberatkan aplikasi dan data paket yang lewat. Disini lah fungsi AJAX agar ketika ada fungsi dilakukan di tidak melakukan refresh terhadap halaman tersebut, tapi hanya pada data baru tersebut.

Tertarik ? Ayo kita belajar bagaimana CRUD Laravel dengan menggunakan AJAX....

Download terlebih dahulu js.app yang akan kita gunakan di bit.ly/idstack-asset-laravelajax. Lalu pindahkan pada folder public. Jangan Lupa untuk menghapus isi dari app.css pada folder public bawaan laravel karena kita akan menggunakan yang dari kita download.

Sebelum melakukan CRUD kita akan mendownload Package yang diperlukan Laravel untuk support ajax nya terlebih dahulu yaitu

Composer.json
        "laravelcollective/html": "^5.7.0",
        "yajra/laravel-datatables-oracle": "~8.0"

config/app.php
 //Provider
 Collective\Html\HtmlServiceProvider::class,
 Yajra\DataTables\DataTablesServiceProvider::class,

//Aliases
 'Form' => Collective\Html\FormFacade::class,
 'Html' => Collective\Html\HtmlFacade::class,
 'DataTables' => Yajra\DataTables\Facades\DataTables::class,


Jika sudah mendownload,  selanjutnya kita akan membuat tabel user terlebih dahulu. Berikut ini pada migration table user.

create_users_table.php
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password')->nullable();
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}


Selanjutnya kita akan buat layout yang akan kita gunakan.

resources/views/layouts/app.blade.php
<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="Laravel AJAX CRUD with Server Side Validation by IDStack">
    <meta name="author" content="IDStack">
    {{-- CSRF TOKEN --}}
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <link rel="icon" href="{{ asset('assets/img/favicon.ico') }}">

    <title>Laravel AJAX CRUD Server Side Validation</title>

    <!-- Bootstrap core CSS -->
    <link href="{{ asset('assets/vendor/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet">

    <!-- Datatables -->
    <link href="{{ asset('assets/vendor/datatables/datatables.min.css') }}" rel="stylesheet">

    <!-- Font Awesome -->
    <link href="{{ asset('assets/vendor/font-awesome/css/font-awesome.min.css') }}" rel="stylesheet">

    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <link href="{{ asset('assets/css/ie10-viewport-bug-workaround.css') }}" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="{{ asset('assets/css/navbar-fixed-top.css') }}" rel="stylesheet">

    <!-- Custom styles for laravel -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">

    @stack('styles')

    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <script src="{{ asset('assets/js/ie-emulation-modes-warning.js') }}"></script>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>

  <body>

    <!-- Fixed navbar -->
    <nav class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Larajax</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Home</a></li>
            <li class=""><a href="{{ route('user.index') }}">User</a></li>
          </ul>
          <ul class="nav navbar-nav navbar-right">
            <li class="active"><a href="./">Fixed top <span class="sr-only">(current)</span></a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

    <div class="container">

    @yield('content')

    </div> <!-- /container -->

    @include('layout._modal')

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="{{ asset('assets/vendor/jquery/jquery.min.js') }}"></script>
    <script src="{{ asset('assets/vendor/bootstrap/js/bootstrap.min.js') }}"></script>

    <!-- Datatables -->
    <script src="{{ asset('assets/vendor/datatables/datatables.min.js') }}"></script>

    <!-- Sweetalert2 -->
    <script src="{{ asset('assets/vendor/sweetalert2/sweetalert2.all.min.js') }}"></script>

    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <script src="{{ asset('assets/js/ie10-viewport-bug-workaround.js') }}"></script>


    <script src="{{ asset('js/app.js') }}"></script>

    @stack('scripts')
  </body>
</html>

resources/views/layouts/_action.blade.php
<a href="{{ $url_show }}" class="btn-show" title="Detail: {{ $model->name }}"><i class="icon-eye-open text-primary" ></i></a> |

<a href="{{ $url_edit }}" class="modal-show edit" title="Edit {{ $model->name }}"><i class="icon-pencil text-inverse"></i></a> |

<a href="{{ $url_destroy }}" class="btn-delete" title="{{ $model->name }}"><i class="icon-trash text-danger"></i></a> 

resources/views/layouts/_modal.blade.php
<div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header" id="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title" id="modal-title">Form Input</h4>
            </div>

            <div class="modal-body" id="modal-body">
            </div>

            <div class="modal-footer" id="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary" id="modal-btn-save">Save changes</button>
            </div>
        </div>
    </div>
</div> 

welcome.blade.php
@extends('layout.app')

@section('content')
<div class="jumbotron">
    <h1>Navbar example</h1>
    <p>This example is a quick exercise to illustrate how the default, static and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p>
    <p>To see the difference between static and fixed top navbars, just scroll.</p>
    <p>
        <a class="btn btn-lg btn-primary" href="#navbar" role="button">View navbar docs »</a>
    </p>
</div>
@endsection 

Kita akan buat seeder untuk mengisi data random dari laravel sehingga kita memiliki data yang banyak. Dengan perintah php artisan make:seeder UsersTableSeeder

UsersTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\User::class, 100)->create();
    }
}


DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UsersTableSeeder::class);
    }
}

Lakukan perintah migrate dengan perintah php artisan make:migrate --seed

Selanjutnya adalah membuat controller dengan perintah php artisan make:controller UserController --resource

UserController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\User;
use DataTables;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('pages.users.index');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $model = new User();
        return view('pages.users.form', compact('model'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
          //
        $this->validate($request, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users,email'
        ]);
        $model = User::create($request->all());
        return $model;
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $model = User::findOrFail($id);
        return view('pages.users.show', compact('model'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
         $model = User::findOrFail($id);
        return view('pages.users.form', compact('model'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $this->validate($request, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users,email,' . $id
        ]);
        $model = User::findOrFail($id);
        $model->update($request->all());
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $model = User::findOrFail($id);
        $model->delete();
        // User::destroy($id);
    }

    public function dataTable()
    {
        $model = User::query();
        return DataTables::of($model)
            ->addColumn('action', function ($model){
                return view('layout._action', [
                    'model' => $model,
                    'url_show' => route('user.show', $model->id),
                    'url_edit' => route('user.edit', $model->id),
                    'url_destroy' => route('user.destroy', $model->id),
                ]);
            })
            ->addIndexColumn()
            ->rawColumns(['action'])
            ->make(true);
    }
}


routes/web.php
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::resource('/user', 'UserController');

Route::get('/table/user', 'UserController@dataTable')->name('table.user');

public/js/app.js
 
$('body').on('click', '.modal-show', function (event) {
    event.preventDefault();

    var me = $(this),
        url = me.attr('href'),
        title = me.attr('title');

    $('#modal-title').text(title);
    $('#modal-btn-save').text(me.hasClass('edit') ? 'Update' : 'Create');

    $.ajax({
        url: url,
        dataType: 'html',
        success: function (response) {
            $('#modal-body').html(response);
        }
    });

    $('#modal').modal('show');
});

$('#modal-btn-save').click(function (event) {
    event.preventDefault();

    var form = $('#modal-body form'),
        url = form.attr('action'),
        method = $('input[name=_method]').val() == undefined ? 'POST' : 'PUT';

    form.find('.help-block').remove();
    form.find('.form-group').removeClass('has-error');

    $.ajax({
        url : url,
        method: method,
        data : form.serialize(),
        success: function (response) {
            form.trigger('reset');
            $('#modal').modal('hide');
            $('#datatable').DataTable().ajax.reload();

            swal({
                type : 'success',
                title : 'Success!',
                text : 'Data has been saved!'
            });
        },
        error : function (xhr) {
            var res = xhr.responseJSON;
            if ($.isEmptyObject(res) == false) {
                $.each(res.errors, function (key, value) {
                    $('#' + key)
                        .closest('.form-group')
                        .addClass('has-error')
                        .append('<span class="help-block"><strong>' + value + '</strong></span>');
                });
            }
        }
    })
});

$('body').on('click', '.btn-delete', function (event) {
    event.preventDefault();

    var me = $(this),
        url = me.attr('href'),
        title = me.attr('title'),
        csrf_token = $('meta[name="csrf-token"]').attr('content');

    swal({
        title: 'Are you sure want to delete ' + title + ' ?',
        text: 'You won\'t be able to revert this!',
        type: 'warning',
        showCancelButton: true,
        confirmButtonColor: '#3085d6',
        cancelButtonColor: '#d33',
        confirmButtonText: 'Yes, delete it!'
    }).then((result) => {
        if (result.value) {
            $.ajax({
                url: url,
                type: "POST",
                data: {
                    '_method': 'DELETE',
                    '_token': csrf_token
                },
                success: function (response) {
                    $('#datatable').DataTable().ajax.reload();
                    swal({
                        type: 'success',
                        title: 'Success!',
                        text: 'Data has been deleted!'
                    });
                },
                error: function (xhr) {
                error: function (xhr) {
                    swal({
                        type: 'error',
                        title: 'Oops...',
                        text: 'Something went wrong!'
                    });
                }
            });
        }
    });
};

view/form.blade.php
{!! Form::model($model, [
    'route' => $model->exists ? ['user.update', $model->id] : 'user.store',
    'method' => $model->exists ? 'PUT' : 'POST'
]) !!}

    <div class="form-group">
        <label for="" class="control-label">Name</label>
        {!! Form::text('name', null, ['class' => 'form-control', 'id' => 'name']) !!}
    </div>

    <div class="form-group">
        <label for="" class="control-label">E-Mail</label>
        {!! Form::email('email', null, ['class' => 'form-control', 'id' => 'email']) !!}
    </div>

{!! Form::close() !!} 

view/index.blade.php
@extends('layout.app')

@section('content')
<div class="panel panel-primary">
    <div class="panel-heading">
      <h3 class="panel-title">Datatable
          <a href="{{route('user.create')}}" class="btn btn-success pull-right modal-show" style="margin-top: -8px;" title="Create User"><i class="icon-plus"></i> Create</a>
      </h3>
    </div>
    <div class="panel-body">
          <table id="datatable" class="table table-hover" style="width:100%">
              <thead>
                  <tr>
                      <th>No</th>
                      <th>Name</th>
                      <th>Email</th>
                      <th></th>
                  </tr>
              </thead>
              <tbody>

              </tbody>
             
          </table>
    </div>
</div>
@endsection

@push('scripts')
    <script>
        $('#datatable').DataTable({
            responsive: true,
            processing: true,
            serverSide: true,
            ajax: "{{ route('table.user') }}",
            columns: [
                {data: 'id', name: 'id'},
                {data: 'name', name: 'name'},
                {data: 'email', name: 'email'},
                {data: 'action', name: 'action'}
            ]
        });
    </script>
@endpush 

view/show.blade.php
<table class="table table-hover">
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>E-Mail</th>
    </tr>
    <tr>
        <td>{{ $model->id }}</td>
        <td>{{ $model->name }}</td>
        <td>{{ $model->email }}</td>
    </tr>
</table>