Warning: PDOStatement::execute(): MySQL server has gone away in DatabaseStatementBase->execute()

Warning: PDOStatement::execute(): MySQL server has gone away in DatabaseStatementBase->execute()

Bagi pengguna drupal yang baru saja install xampp install ulang xampp dan migrasi drupal ke lingkungan development lokal, dan menemukan error seperti diatas, berikut solusinya. Setidaknya ini bekerja di kasus yang saya alami.

Kasus saya adalah ketika saya upgrade versi xampp, muncul error diatas ketika buka applikasi web drupal-nya.

masalahnya ada di setting mysql.

pada setting mysql, cari max_allowed_packet  dan ubah nilainya menjadi lebih tinggi. Secara default tertulis 1 M. Ubah misal menjadi 32 M.

lokasi setting mysql:

xampp/mysql/bin/my.ini

cari dan ubah menjadi:

max_allowed_packet = 32M

kemudian restart service mysql dalam xampp.

Error sudah hilang dan drupal bisa dibuka kembali.

Cara Apply Patch di Drupal

Ini ada video bagus untuk apply patch di drupal.

Apply patch biasanya untuk contributed module atau ada bug kemudian dari komunitas drupal memberikan update patch untuk mengatasi bug tersebut.

File patch drupal berbentuk ekstensi .patch

Berikut videonya

Saya mggunakan git dan perintah curl untuk apply patch di komputer saya yang berbasis windows.

Masuk ke folder module drupal yang ingin kita apply patch nya di komputer lokal kita, dan masuk ke dalam git bash.

ketik perintah

curl <link ke file patch> | patch -p1

tunggu sebentar dan akan ada notifikasi sukses update patch.

Drupal 7 Masalah From Name Pada SMTP module

Bagi yang punya kasus dengan SMTP module untuk drupal 7 yang tidak memunculkan nama pengirim, hanya alamat email saja, berikut solusinya

Pada file smtp.mail.inc, pada baris ke 122, ganti kode berikut

$properfrom = variable_get('site_mail', '');

dengan

$properfrom = variable_get('smtp_from', '');

Kode diatas untuk mengambil from name dari halaman administrasi modul smtp.

Kemudian pada baris 143, temukan kode berikut

$from_comp = $this->_get_components($from);

dan tambahkan kode berikut dibawahnya

if ( empty($from_comp['name']) ) $from_comp['name'] = $from_name;

Kode diatas untuk mendefinisak from name.

Selesai.

solusi ini saya adopsi dari sini. Sudah saya terapkan dan fungsi email option berupa “from address” dan “from name” pada modul smtp menjadi berfungsi.

Drupal 7: Render Menu Navigations

Ada suatu kasus dimana saya harus membuat menu navigation dalam website yang dibangun menggunakan drupal. Sebenarnya menu navigation-nya sudah ada tetapi dibuat secara manual atau hard-coding.

Untuk merapikan management website-nya saya coba migrasi menu tersebut ke system menu yang disediakan drupal.

Di halaman admin>structure>menu ada fasilitas dari drupal untuk membuat menu. Nah, idenya adalah bagaimana memanfaatkan sistem drupal semaksimal mungkin dan menggunakan fungsi-fungsi bawaan drupal.

Kemudian permasalahannya adalah bagaimana menu yang telah dibuat di halaman administrator tesebut bisa muncul.

Berikut adalah cara untuk me-render menu yang dibuat dalam halaman admin>structure>menu ke dalam tampilan templates.

<?php
	menu_tree_all_data('main-menu');
	$menu = menu_build_tree('main-menu');
	$menu_items = render(menu_tree_output($menu));
	print $menu_items;
?>

Cara diatas sudah saya test dan berhasil di custom templates saya.

Sumbernya, saya lupa, nanti kalau ketemu saya edit postingan ini.

Drupal 7: File Status Permanent

Postingan ini berkaitan dengan postingan sebelumnya yaitu Drupal 7: Cara Ambil URL File yang Disimpan Melalui Custom Form Halaman Admin.

Pada postingan tersebut, ada bagian snippet yang fungsinya sebagai form handler dari fungsi form submit, sebagai berikut.

function mymodule_set_default_header_image_form_submit($form, &$form_state){
  $form['mymodule_default_header']['#file']->status = FILE_STATUS_PERMANENT;
  file_save($form['mymodule_default_header']['#file']);
}

fungsi di atas gunanya untuk membuat file berstatus di system-nya drupal menjadi permanent. Artinya dia tidak akan dihapus saat pembersihan reguler file-file yang dianggap temporary oleh drupal. Tapi ternyata dalam kasus saya tidak berfungsi.

Saya cari-cari di berbagai sumber, akhirnya menemukan solusi yang sudah saya test berhasil dari forum drupal, yaitu mengganti fungsi form handlernya menjadi seperti dibawah:

function mymodule_set_default_header_image_form_submit($form, &$form_state){

  global $user;
  $account = user_load($user->uid);
		
  $fid = $form_state['values']['mymodule_default_header'];
  $file = file_load($fid);
  $file->status = FILE_STATUS_PERMANENT;
  file_save($file);
  file_usage_add($file, 'user', 'user', $account->uid); 

}

Perbedaan utamanya yaitu pada “file ID” dan “file_usage_add”. pada baris ke-7 ada pemanggilan fungsi untuk memanggil file id yang hendak kita ubah statusnya menjadi permanent (bukan temporary). Selanjutnya baru di-set permanent pada baris ke-8.

Sedangkan baris ke-9 yaitu untuk mendefinisikan file tersebut digunakan oleh “siapa”, agar tidak muncul error “failed reference”.

O iya, sebagai monitoring tool bahwa form handler ini benar-benar dipanggil ketika submit form, bisa menggunakan drupal_set_message drupal.

drupal_set_message(t('The form has been submitted.'));

kalau message ini muncul setelah submit form, berarti fungsi diatas harusnya sudah dijalankan dan status file menjadi permanent.