Kategori tidak berguna php. Kelas PHP untuk pekerjaan yang nyaman dan aman dengan MySQL. Pelajari lebih lanjut tentang placeholder yang diketik

Hari ini tujuan kami adalah untuk menciptakan struktur kategori yang hierarkis. Penting bagi kami untuk menyimpan kategori dengan nyaman dan mudah untuk menampilkannya di tempat yang kami butuhkan.

Terkadang yang sederhana terlihat rumit, oleh karena itu saya akan memberikan beberapa potongan kode yang saya harap akan berguna bagi Anda untuk mengimplementasikan kategori php dalam bentuk pohon.

Jadi, strukturnya harus terdiri dari id kategori (id), nama kategori (name) dan tentu saja id kategori induk (parent_id). Di MySQL terlihat seperti ini:

BUAT TABEL JIKA TIDAK ADA `kategori` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `parent_id` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE = CHARSET DEFAULT InnoDB = utf8 AUTO_INCREMENT = 0 ;

Struktur tabel minimal dan mudah dipahami untuk menyimpan kategori.

INSERT INTO `category` (`id`, `name`, `parent_id`) NILAI (1, "Ponsel dan tablet", "0"), (2, "Mobil", "0"), (3, "Samsung ", "1"), (4, "Apple", "1"), (5, "LG", "1"), (6, "Ford", "2"), (7, "Lexus", "2"), (8, "BMW", "2"), (9, " Tab Galaksi 4", "3"), (10, "Galaxy S6", "3");

Di mana parent_id=0, kategori ini tidak memiliki kategori induk.

Semuanya jelas dan sederhana di sini. Sekarang mari beralih ke daftar kategori. Tetapi untuk hasil yang benar dari daftar, pertama-tama kita perlu mendapatkan seluruh daftar kategori php, dan baru kemudian, dengan menggunakan rekursi, bentuk pohon kita. Fungsi berikut adalah untuk mendapatkan daftar ini:

Fungsi get_cat() ( // query database $sql = "SELECT * FROM category"; $result = mysql_query($sql); if(!$result) ( return NULL; ) $arr_cat = array(); if( mysql_num_rows ($hasil) != 0) ( //Untuk($i = 0; $i< mysql_num_rows($result);$i++) { $row = mysql_fetch_array($result,MYSQL_ASSOC); //Формируем массив, где ключами являются адишники на родительские категории if(empty($arr_cat[$row["parent_id"]])) { $arr_cat[$row["parent_id"]] = array(); } $arr_cat[$row["parent_id"]] = $row; } //возвращаем массив return $arr_cat; } }

//dapatkan array katalog $result = get_cat();

Sekarang kita membutuhkan fungsi dengan rekursi

Fungsi view_cat($arr,$parent_id = 0) ( //Kondisi keluar rekursi if(empty($arr[$parent_id])) ( return; ) echo "

    "; // loop melalui array dan tampilkan for($i = 0; $i< count($arr[$parent_id]);$i++) { echo "
  • " .$arr[$parent_id][$i]["nama"].""; //rekursi - periksa apakah ada kategori turunan view_cat($arr,$arr[$parent_id][$i]["id "]); gema "
  • "; ) gema "
"; }

Sekarang tinggal menampilkan direktori di layar menggunakan fungsi rekursif

Lihat_cat($hasil);

Dan secara umum, itu saja. Dengan cara ini kita bisa mendapatkan pohon kategori lengkap dengan subkategori tak terbatas.

) Saya menunjukkan kepada Anda contoh penggunaan ekspresi reguler untuk menemukan bagian tertentu Kode sumber halaman. Sekarang kita akan belajar bagaimana menulisnya sendiri. Keahlian ini akan membantu Anda menulis, menghapus teks dari fragmen yang tidak perlu, mencari bagian yang tepat dalam volume teks yang besar, dan sebagainya.

Tanggal publikasi: 20.10.2013

Kami terus menulis parser statistik pengunjung internet langsung. Jika seseorang baru saja bergabung dengan kami, saya menyarankan Anda untuk memulai dengan, di mana kami terhubung ke layanan tanpa otorisasi. Di sana kami belajar cara mendapatkan konten dari halaman terbuka yang tidak dilindungi kata sandi. Namun nyatanya, akses ke sebagian besar situs ditutup, jadi sangat sedikit gunanya skrip yang tidak tahu cara masuk, seperti yang Anda pahami. Tapi jangan khawatir, kami akan memperbaikinya sekarang.

Tanggal publikasi: 08.10.2013

Selamat siang, pembaca! Sudah waktunya untuk mendapatkan beberapa latihan. Anda sudah memiliki pengetahuan yang cukup untuk mulai menulis skrip berguna yang akan mempermudah pekerjaan Anda. Salah satunya bisa menjadi parser. Apa itu, saya jelaskan secara rinci sendiri, jadi jika Anda tidak tahu, saya menyarankan Anda untuk membacanya. Singkatnya, inti dari parser adalah mencari dan mengisolasi informasi yang perlu dari sepotong besar teks. Dalam kasus Internet, ini paling sering menarik data yang diperlukan dari halaman situs. Dalam kasus kami, ini adalah Liveinternet. Jadi ayo pergi!

Tanggal publikasi: 03/10/2013

Artikel ini akan fokus pada alat yang ampuh seperti cURL, serta pustaka php yang menyediakan akses ke alat ini - libcurl. Untuk apa semua ini? Untuk berkomunikasi dengan server melalui protokol transfer data, seperti http atau ftp. Protokol lainnya tidak terlalu menarik bagi kami, jika seseorang ingin mempelajari topik ini, mereka harus menggali sumber daya berbahasa Inggris, dan artikel ini akan berisi dasar-dasar dan contoh penggunaan.

Tanggal publikasi: 24.11.2012

Tanggal publikasi: 05.11.2012

Dan sekarang akan ada pelajaran yang agak besar, tetapi tidak rumit tentang bekerja dengan file di php. Pertama-tama, untuk apa file-file itu? Bagaimanapun, Anda dapat menyimpan semuanya di database data MySQL atau PostgreSQL atau apa pun. Namun terkadang ada tugas seperti itu saat menggunakan database, dengan semua pemrosesan dan kepedulian terhadap keamanan koneksi, tidak disarankan. Misalnya, Anda perlu membuat penghitung biasa, dan sebelumnya, kami tidak menggunakan database di proyek kami. Jadi mengapa kita, demi satu penghitung kecil, memulai database dan hanya menyimpan beberapa baris di dalamnya? jauh lebih mudah menggunakan file. Selain itu, terkadang hosting tidak mendukung database sama sekali, maka file umumnya tetap menjadi satu-satunya jalan keluar.

Tanggal publikasi: 04.11.2012

Setiap kali Anda mengizinkan pengguna mengirimkan teks ke situs Anda (nama, atau informasi lainnya), Anda harus berhati-hati. Anda harus yakin bahwa Anda tidak memiliki lubang keamanan di situs yang dapat digunakan penyerang untuk meretas. Jika Anda masih perlu menerima data dari pengguna, pastikan untuk menggunakan fungsi htmlentities untuk mencegah menjalankan kode atau skrip HTML yang dapat merugikan dan berbahaya!

Tanggal publikasi: 04.11.2012

Dalam pelajaran ini, kita akan melihat teknik untuk meneruskan data antara formulir dan halaman. Metode ini adalah POST dan GET. Kami akan membicarakan masing-masing secara terpisah dan lebih terinci. Secara umum, diperlukan komunikasi antar bentuk. Misalnya, kami mengisi beberapa bidang di halaman dan kami perlu mentransfernya ke halaman lain untuk diproses.

Tanggal publikasi: 03.11.2012

Faktanya, seperti yang mungkin sudah Anda duga sekarang, do while loop adalah versi yang sedikit dimodifikasi dari while loop yang kita lihat di tutorial sebelumnya. Jika Anda ingat cara kerja while reguler, maka akan lebih mudah bagi Anda untuk memahami loop baru. Mari kita ulangi: tubuh while loop dieksekusi jika kondisinya benar dan tidak dieksekusi jika tidak benar, tetapi mungkin tidak dieksekusi sekali pun jika kondisinya salah sejak awal. Bagaimana cara kerjanya?

Tanggal publikasi: 03.11.2012

Bayangkan Anda memiliki array asosiatif yang ingin Anda ulangi. PHP menyediakan cara mudah untuk menggunakan setiap elemen array secara bergantian menggunakan konstruksi Foreach.

Mengembalikan array objek yang berisi informasi kategori.

Parameter yang diteruskan ke fungsi ini sangat mirip dengan parameter yang diteruskan ke fungsi wp_list_categories() dan dapat diteruskan sebagai larik atau string kueri: type=post&order=DESC .

✈ 1 kali = 0,005625s = Sangat lambat| 50000 kali = 11,98 detik = perlahan-lahan| PHP 7.1.11, WP 4.9.5

Penggunaan

$kategori = get_categories($args);

Pola penggunaan

$kategori = get_categories(array("taxonomy" => "kategori", "type" => "posting", "child_of" => 0, "parent" => "", "orderby" => "nama", " order" => "ASC", "hide_empty" => 1, "hierarchical" => 1, "exclude" => "", "include" => "", "number" => 0, "pad_counts" => Salah, // daftar lengkap parameter, lihat deskripsi fungsi http://wp-kama.ru/function/get_terms)); if($categories)( foreach($categories as $cat)( // Data dalam objek $cat // $cat->term_id // $cat->nama (Kategori 1) // $cat->slug (rubrika - 1) // $cat->term_group (0) // $cat->term_taxonomy_id (4) // $cat->taxonomy (kategori) // $cat->description (teks deskripsi) // $cat-> induk (0) // $cat->count (14) // $cat->object_id (2743) // $cat->cat_ID (4) // $cat->category_count (14) // $cat-> kategori_deskripsi (Teks deskripsi) // $cat->cat_name (Kategori 1) // $cat->category_nicename (rubrika-1) // $cat->category_parent (0) ) ) taksonomi (garis) Nama taksonomi yang akan diproses. Ditambahkan sejak versi 3.0.
Bawaan: "kategori" Tipe (garis)
  • posting - kategori posting (default);
  • link - bagian dari link.
    Bawaan: "posting"
anak dari (garis) Dapatkan kategori anak (termasuk semua level bersarang) dari kategori yang ditentukan. Parameter menentukan ID dari kategori induk (kategori yang kategori bersarangnya ingin Anda tampilkan). induk (nomor) Mendapatkan kategori yang kategori induknya sama dengan parameter ID yang ditentukan. Perbedaan dari child_of adalah bahwa satu level nesting akan ditampilkan.
Bawaan: "" dipesan oleh (garis)

Menyortir data yang diterima sesuai dengan kriteria tertentu. Misalnya dengan jumlah posting di setiap kategori atau dengan nama kategori. Kriteria berikut tersedia:

  • ID - mengurutkan berdasarkan ID;
  • nama - urutkan berdasarkan nama (default);
  • siput - menyortir berdasarkan alt. nama (siput);
  • hitung - berdasarkan jumlah entri dalam kategori;
  • term_group - menurut grup.

Standar: "nama"

Memesan (garis)

Arah penyortiran yang ditentukan dalam parameter "orderby":

  • ASC - secara berurutan, dari yang terkecil hingga yang terbesar (1, 2, 3; a, b, c);
  • DESC - dalam urutan terbalik, dari terbesar ke terkecil (3, 2, 1; c, b, a).

Bawaan: "ASC"

Sembunyikan_kosong (logis)

Apakah mendapatkan kategori kosong atau tidak (tidak memiliki entri):

  • 1 (benar) - tidak menerima kosong,
  • 0 (salah) - kosongkan.

Standar: benar

Hirarki (logis) Jika parameter diatur ke BENAR, hasilnya akan menyertakan kategori anak kosong yang kategori anak-anaknya memiliki entri (tidak kosong).
Standar: benar mengecualikan (tali/array) Kecualikan kategori apa pun dari daftar. Anda harus menentukan ID kategori yang dipisahkan dengan koma atau dalam larik. Jika parameter ini ditentukan, parameter child_of akan diganti.
Bawaan: "" termasuk (tali/array) Cantumkan hanya kategori yang ditentukan. Anda perlu menentukan ID kategori yang dipisahkan dengan koma atau dalam larik.
Bawaan: "" nomor (nomor) Membatasi. Jumlah kategori yang akan diambil. Secara default, tidak ada batasan - semua kategori akan diambil. pad_counts (logis) Jika benar, maka angka yang menunjukkan jumlah entri dalam kategori induk akan menjadi jumlah entrinya sendiri dan entri dari kategori anak.
Standar: salah

Contoh

Daftar tarik-turun #1

Untuk membuat daftar dropdown kategori, kita dapat menggunakan fungsi khusus lainnya wp_dropdown_categories() :

wp_dropdown_categories(array("hide_empty" => 0, "name" => "category_parent", "orderby" => "name", "selected" => $category->parent, "hierarchical" => true, "show_option_none" => __("Tidak ada")));

namun, dengan pendekatan ini, kami akan kehilangan beberapa fleksibilitas dalam menyiapkan daftar, karena kami akan berakhir dengan daftar yang lengkap.

Oleh karena itu, dalam beberapa kasus akan lebih logis untuk membuat daftar drop-down menggunakan fungsi tersebut dapatkan_kategori(). Berikut contohnya (dengan asumsi kita ingin menampilkan subkategori (anak) dari kategori 10):

#2 Daftar kategori dan deskripsinya

Contoh ini akan menunjukkan kepada kita cara membuat daftar tautan ke kategori, di mana segera setelah setiap tautan akan ada deskripsi kategori (ditentukan saat membuat / mengedit kategori):

"nama", "pesanan" => "ASC")); foreach($kategori sebagai $kategori)( echo "

Kategori: term_id) . ""judul="" . sprintf(__("Lihat semua posting di %s"), $category->name) . "" " . ">" .$kategori->nama."

"; gema"

Deskripsi:". $kategori->deskripsi . "

"; gema"

Jumlah Postingan: ".$category->count . "

"; } ?>

Catatan

  • Lihat: get_terms() Jenis argumen yang dapat diubah.

Daftar perubahan

Sejak versi 2.1.0 Diperkenalkan.

Kode dapatkan kategori : wp-includes/category.php WP 5.3.2

"kategori"); $args = wp_parse_args($args, $default); /** * Memfilter taksonomi yang digunakan untuk mengambil istilah saat memanggil get_categories(). * * @since 2.7.0 * * @param string $taxonomy Taksonomi untuk mengambil istilah dari. * @param array $args Array argumen. Lihat get_terms(). */ $args["taxonomy"] = apply_filters("get_categories_taxonomy", $args["taxonomy"], $args); // Kembalikan compat if (isset($args["type"]) && "link" == $args["type"]) ( _deprecated_argument(__FUNCTION__, "3.0.0", sprintf(/* translators: 1: " type => link", 2: "taxonomy => link_category" */ __("%1$s tidak digunakan lagi. Gunakan %2$s sebagai gantinya."), " ketik => tautan", "taksonomi => tautan_kategori")); $args["taxonomy"] = "link_category"; ) $categories = get_terms($args); if (is_wp_error($categories)) ( $categories = array(); ) else ( $categories = (array ) $kategori; foreach (array_keys($categories) as $k) ( _make_cat_compat($categories[ $k ]); ) ) kembalikan $categories; )

Pada artikel ini (tingkat webmaster - lanjutan), kita akan berbicara tentang, berpotongan dengan cara yang berbeda, yang disebut. navigasi segi. Untuk menyederhanakan asimilasi materi, saya sarankan untuk membaca artikel Wikipedia "Klasifikasi aspek" dan publikasi dalam bahasa Inggris (tetapi dengan gambar!) "Rancang navigasi segi yang lebih baik untuk situs web Anda".

Navigasi segi yang difilter berdasarkan warna atau kisaran harga dapat bermanfaat bagi pengunjung Anda, tetapi seringkali merugikan pencarian dengan membuat beberapa kombinasi alamat dengan konten duplikat. Karena duplikat, mesin telusur tidak akan dapat merayapi situs dengan cepat untuk pembaruan konten, yang karenanya memengaruhi pengindeksan. Untuk meminimalkan masalah ini dan membantu webmaster menjadikan navigasi berfaset ramah penelusuran, kami ingin:

Ideal untuk pengguna dan pencarian Google

Bersihkan jalur ke halaman produk/artikel:

Mewakili URL untuk halaman kategori:
http://www.example.com/category.php?category=gummy-candies

Mewakili URL untuk produk tertentu:
http://www.example.com/product.php?item=swedish-fish

Duplikat yang tidak diinginkan disebabkan oleh navigasi faceted

Halaman yang sama dapat diakses dari alamat web yang berbeda:

Halaman kanonis



URL: contoh.com/produk.php? item=ikan-swedia

Halaman duplikat



URL: contoh.com/produk.php? item=ikan-swedish&kategori=permen-permen&harga=5-10


kategori=permen-permen&rasa=asam&harga=5-10

Kesalahan:

  • Tidak masuk akal bagi Google, karena pengguna jarang menelusuri [$9:55 marmalade].
  • Tidak masuk akal bagi crawler untuk menemukan item yang sama ("salad buah") dari halaman kategori induk (baik "Gummi" atau "Sour Gummy").
  • Poin negatif untuk pemilik situs, karena permintaan pengindeksan diencerkan dengan beberapa versi dari kategori yang sama.
  • Poin negatif bagi pemilik situs, karena ini adalah beban yang tidak berguna dan tidak perlu pada bandwidth situs
Halaman kosong:


URL: contoh.com/kategori.php? kategori=permen-permen&rasa=asam&harga=lebih dari 10

Kesalahan:

  • Salah memberikan kode untuk mesin telusur (dalam hal ini, halaman harus memberikan kode 404)
  • Halaman kosong untuk pengguna


Solusi terburuk (ramah pencarian) untuk navigasi berwajah

Contoh 1: Parameter non-standar digunakan di URL: koma dan tanda kurung, bukan kunci=nilai&:

  • contoh.com/kategori? [ kategori: permen bergetah ][ urutkan: harga-rendah-ke-tinggi ][ sid:789 ]
  • example.com/category?category , gummy-candy , sort , lowtohigh , sid , 789
Cara:
contoh.com/kategori? kategori=permen-gummy&sort=rendah-ke-tinggi&sid=789

Contoh #2: Menggunakan direktori atau jalur file daripada opsi dalam daftar nilai yang tidak mengubah konten halaman:
example.com/c123/s789/product?swedish-fish
(di mana /c123/ adalah kategorinya, /s789/ adalah ID sesi, yang tidak mengubah konten halaman)

Keputusan bagus:

  • contoh.com /gummy-candy/ product?item=swedish-fish&sid=789(direktori, /gummy-candy/, mengubah isi halaman dengan cara yang berarti)
Solusi terbaik:
  • example.com/product?item=swedish-fish& kategori=permen-permen&sid=789 (Parameter URL memberi lebih banyak fleksibilitas bagi mesin telusur untuk menentukan cara merayapi secara efisien)
Perayap sulit membedakan nilai yang berguna (mis. "permen bergetah") dari nilai yang tidak berguna (mis. "SESSIONID") saat nilai ini ditempatkan langsung di jalur tautan. Di sisi lain, parameter URL memberikan fleksibilitas bagi mesin telusur untuk memeriksa dan menentukan dengan cepat kapan nilai yang diberikan tidak memerlukan akses perayap ke semua variasi.

Nilai umum yang tidak mengubah konten halaman dan harus dicantumkan sebagai parameter URL antara lain:

  • ID sesi
  • Pelacakan ID
  • Pengidentifikasi perujuk
  • Stempel waktu
Contoh #3: Mengonversi nilai yang dihasilkan pengguna (mungkin tak terbatas) menjadi parameter URL yang dapat dirayapi dan diindeks tetapi tidak berguna untuk penelusuran.
Menggunakan data kecil yang dihasilkan oleh pengguna situs (seperti bujur/lintang atau "hari yang lalu") di URL yang dirayapi dan diindeks:
  • example.com/find-a-doctor? radius=15&garis lintang=40,7565068&garis bujur=-73,9668408
  • example.com/article?category=kesehatan& hari-lalu = 7
Cara:
  • example.com/find-a-doctor? kota=san-fransisco&lingkungan=soma
  • example.com/articles?category=kesehatan& tanggal=10-januari-2014
Daripada membiarkan pengguna menghasilkan nilai untuk menghasilkan URL yang dapat dirayapi (menghasilkan kemungkinan tak terbatas dengan nilai yang sangat kecil bagi pengunjung), lebih baik menerbitkan kategori halaman untuk nilai paling populer, dan informasi tambahan dapat disertakan untuk membuat halaman lebih banyak berharga daripada halaman pencarian biasa dengan hasil. Alternatifnya, Anda dapat mempertimbangkan untuk menempatkan nilai buatan pengguna di direktori terpisah dan kemudian menggunakan robots.txt untuk menonaktifkan perayapan dari direktori tersebut.
  • contoh.com /penyaringan/ find-a-doctor?radius=15&latitude=40.7565068&longitude=-73.9668408
  • contoh.com /penyaringan/ artikel?kategori=kesehatan&hari-lalu=7
Dan di robots.txt:
Agen pengguna: *
Melarang: /penyaringan/

Contoh #4. Menambahkan parameter URL tanpa logika.

  • contoh.com /permen-permen/permen-permen/permen-permen/ bergetah-permen/produk?swedia-ikan
  • contoh.com/produk? kucing=permen-permen&kucing=lolipop&kucing=permen-permen&cat=permen-permen&item=ikan-swedish
Keputusan bagus:
  • example.com /gummy-candy/ product?item=swedish-fish
Solusi terbaik:
  • contoh.com/produk? item=swedish-fish&category=permen-permen
Parameter URL asing hanya meningkatkan duplikasi, dan akibatnya, situs tersebut kurang efisien dirayapi dan diindeks. Oleh karena itu, Anda perlu membuang parameter URL yang tidak perlu dan membersihkan tautan sampah secara berkala sebelum membuat URL baru. Jika banyak parameter diperlukan untuk sesi pengguna, dimungkinkan untuk menyembunyikan informasi dalam cookie, daripada terus menambahkan nilai, seperti kucing=permen-permen&kucing=lolipop&kucing=permen-permen& ...

Contoh #5: Sarankan perbaikan lebih lanjut (penyaringan) bila ada hasil null.

Dengan buruk:
Izinkan pengguna memilih filter saat ada item null untuk disempurnakan.


Menyempurnakan halaman dengan hasil nol (misalnya, price=over-10), yang membuat pengguna frustrasi dan menyebabkan kueri yang tidak perlu untuk mesin telusur.

Cara:
Buat tautan hanya jika ada elemen untuk dipilih pengguna. Jika hasilnya nol, tandai tautan sebagai "abu-abu" (yaitu tidak dapat diklik). Untuk lebih meningkatkan kegunaan, pertimbangkan untuk menyertakan indikator jumlah item di samping setiap filter.


Menampilkan halaman dengan hasil nol (misalnya, price=over-10) tidak diperbolehkan, plus dilarang bagi pengguna untuk melakukan klik yang tidak perlu, dan mesin telusur merayapi halaman yang tidak berguna ini.

Penting untuk mencegah URL yang tidak perlu dan meminimalkan ruang pengunjung dengan membuat URL hanya jika produk tersedia. Ini akan membantu pengguna tetap terlibat di situs Anda (mengklik tombol kembali lebih sedikit saat tidak ada produk yang ditemukan), mengurangi jumlah kemungkinan URL yang diketahui oleh mesin telusur. Selain itu, jika halaman tersebut tidak hanya "sementara kehabisan stok" tetapi sepertinya tidak pernah berisi informasi yang relevan, pertimbangkan untuk memberikan kode respons 404. Di halaman 404, Anda dapat mendesain pesan yang berguna bagi pengguna dengan lebih banyak opsi navigasi atau kotak pencarian sehingga pengguna dapat menemukan produk terkait.

Untuk situs baru yang webmaster sedang mempertimbangkan untuk menerapkan navigasi segi, ada beberapa opsi untuk mengoptimalkan perayapan (pengumpulan alamat di situs Anda yang diketahui Googlebot) dari halaman konten unik dan mengurangi pengindeksan mesin telusur dari halaman duplikat (konsolidasi sinyal pengindeksan).

Tentukan parameter URL apa yang diperlukan mesin telusur untuk merayapi setiap halaman konten (yaitu, tentukan parameter apa yang diperlukan untuk membuat setidaknya satu jalur klik ke setiap item). Parameter yang diperlukan dapat mencakup item-id , category-id , page dll.

Tentukan parameter mana yang akan berguna bagi pengunjung dengan kueri mereka, dan mana yang lebih cenderung menyebabkan duplikasi dalam perayapan dan pengindeksan. Dalam contoh penganan (marmalade), parameter URL "rasa" dapat bermanfaat bagi pengguna dengan kueri dalam contoh rasa = asam . Namun, logis untuk mempertimbangkan parameter "harga" sebagai penyebab duplikasi yang tidak perlu kategori=permen-permen&rasa=asam& harga = lebih dari 10 . Contoh umum lainnya:

  • Parameter berharga untuk mesin telusur: item-id , category-id , name , brand ...
  • Parameter yang tidak diperlukan: session-id , price-range ...
Pertimbangkan untuk menerapkan salah satu dari beberapa opsi konfigurasi untuk URL yang berisi parameter yang tidak diperlukan. Pastikan saja bahwa parameter URL yang "tidak perlu" benar-benar tidak diperlukan untuk perayapan oleh perayap atau bagi pengguna untuk menemukan setiap produk!

Opsi 1: dan tautan internal

Tandai semua URL yang tidak perlu dengan . Ini akan mengurangi biaya tenaga kerja robot pencari dan mencegah penurunan frekuensi pemindaian. Anda perlu mengelola perayapan secara global melalui robots.txt (Catatan penerjemah: lihat artikel "").
Gunakan atribut rel="canonical" untuk memisahkan halaman indeks pencarian dari halaman yang tidak diperlukan di sana (misalnya, di halaman harga = 5-10 Anda dapat menulis atribut rel="canonical", yang menunjukkan kategori semua selai asam example.com/category.php?category=gummy-candies&taste=sour& halaman=semua ).

Opsi 2: Robots.txt dan Larang

URL dengan parameter yang tidak perlu disertakan dalam direktori /filtering/, yang akan ditutup di robots.txt (dilarang disallow). Ini akan memungkinkan semua mesin telusur untuk merayapi hanya intralink (konten) situs yang "benar", tetapi akan memblokir perayapan URL yang tidak diinginkan sekaligus. Sebagai contoh ( example.com/category.php?category=gummy-candies), jika parameter yang berharga adalah item, kategori, dan rasa, dan id sesi serta harga berlebihan, maka URL untuk rasa adalah:
example.com/category.php?category=gummy-candies& rasa = asam, tetapi semua parameter yang tidak perlu, seperti harga, URL akan disertakan dalam direktori yang telah ditentukan sebelumnya - /filtering/:
contoh.com /penyaringan/ category.php?category=permen-gummy&price=5-10,
yang kemudian akan diblokir melalui robots.txt:
Agen pengguna: *
Larang: /memfilter/

Opsi 3: Host terpisah

Pastikan solusi terbaik yang tercantum di atas (untuk alamat sampah, misalnya) masih berlaku. Jika tidak, mesin pencari telah membentuk massa tautan yang besar di indeks. Dengan demikian, pekerjaan Anda akan ditujukan untuk mengurangi pertumbuhan lebih lanjut dari halaman yang tidak perlu yang dilihat oleh Googlebot dan mengkonsolidasikan sinyal pengindeksan.

Gunakan parameter dengan pengodean standar dan format kunci=nilai.

Pastikan nilai yang tidak mengubah konten halaman, seperti ID sesi, diimplementasikan sebagai key=value, bukan direktori.

Jangan izinkan klik dan jangan buat URL jika tidak ada elemen untuk difilter.

Tambahkan logika ke pemetaan parameter URL: hapus parameter yang tidak perlu daripada menambahkan nilai sepanjang waktu (mis. hindari membuat tautan seperti ini: example.com/product?cat=gummy-candy&cat=lolipop &cat=gummy-candy&item=swedish-fish).

Simpan parameter berharga di URL dengan mencantumkannya terlebih dahulu (karena URL terlihat di hasil penelusuran) dan parameter yang kurang relevan terakhir (seperti ID sesi).
Hindari struktur tautan ini: contoh.com/kategori.php? session-id=123&tracking-id=456&kategori=permen-permen&rasa=asam
Sesuaikan setelan URL di Alat Webmaster jika Anda memiliki pemahaman yang jelas tentang cara kerja tautan di situs Anda.

Pastikan bahwa saat menggunakan JavaScript untuk mengelola konten secara dinamis (urutkan/filter/sembunyikan) tanpa memperbarui URL, ada alamat web asli di situs Anda yang memiliki nilai penelusuran, seperti kategori utama dan laman produk, yang dapat dirayapi dan diindeks. Cobalah untuk tidak hanya menggunakan beranda (yaitu satu URL) untuk seluruh situs Anda, tetapi ubah konten navigasi secara dinamis melalui JavaScript - ini, sayangnya, hanya akan memberi pengguna satu URL dalam pencarian. Selain itu, pastikan kinerja tidak berdampak negatif pada pemfilteran dinamis, karena ini akan mencegah pengguna bekerja dengan situs tersebut.

Tingkatkan pengindeksan halaman berbeda dari konten yang sama dengan menentukan atribut rel="canonical" pada versi halaman dengan hak istimewa. Atribut rel="canonical" dapat digunakan dalam satu atau beberapa domain.

Optimalkan pengindeksan konten "bernomor halaman" (mis. halaman=1 dan halaman=2 dari kategori "permen bergetah") dengan (salah satunya):

  • Tambahkan atribut rel="canonical" ke rangkaian halaman yang menentukan kategori kanonis dengan parameter "lihat semua" (misalnya, halaman=1, halaman=2, dan halaman=3 dari kategori "permen bergetah" dengan rel=” kanonik” aktif kategori=permen-permen&halaman=semua), memastikan laman relevan bagi pengguna dan dimuat dengan cepat.
  • Gunakan markup pagination rel="next" dan rel="prev" untuk menunjukkan hubungan antara masing-masing halaman (lihat "Paginaton dengan rel="next" dan rel="prev" ") .
Sertakan hanya tautan kanonis di peta situs.

Jadi, sebagai permulaan, saya akan menjelaskan apa yang akan kami kerjakan dan apa yang kami butuhkan.
Sistem: PHP 5 ke atas, mySQL 4 ke atas
Kelas pembantu: dbsql.class.php (kelas database)
Kelas kategori bersarang: classTreeCategory.php (langsung kelas utama, daftar dan penjelasannya diberikan di bawah ini.

Buat tabel di database dengan struktur berikut:

Melihat Kode MySQL

Tabel ini berisi bidang PENGENAL- nomor seri kategori, podcat- memiliki nilai nol untuk kategori urutan pertama atau ID dari kategori induk, nama- nama kategori.

Contoh kelas, menampilkan kategori sebagai daftar dengan subkategori:

Lihat kode PHP

include("dbsql.class.php" ); include("classTreeCategory.php" ); $DB = new DB_Engine("mysql" , $settings [ "dbHost" ] , $settings [ "dbUser" ] , $settings [ "dbPass" ] , $settings [ "dbName" ] ); // sambungkan ke database, tentukan data akses$kategori = TreeCategory baru ($DB ); // lolos ke kelas kategori, objek kerja dengan database$kategori -> tabel = "kategori" ; // nama tabel dalam database dengan kategori$array = $kategori -> getCategory() ; // dapatkan semua kategori dari database dalam bentuk array multi-level, sudah diurutkan dan disarangkan sesuai urutan yang kita butuhkan$kategori -> outCategory ($array , "opsi" ); // menyiapkan keluaran kategori (membentuk HTML), meneruskan larik dengan kategori gema $kategori -> html ; // keluaran kategori sebagai HTML

Seperti yang Anda lihat dari contoh di atas, semuanya sangat sederhana, kami membuat objek $category baru, mengatur tabel database mana yang kami gunakan: 'kategori', lalu kami mendapatkan dari tabel daftar semua kategori yang sudah diformat sebagai array dan diuraikan dalam urutan hierarkis, dengan mempertimbangkan semua subkategori. lalu kami meneruskan larik ke metode outCategory() , yang menghasilkan kode HTML siap pakai untuk kami, yang tersisa hanya untuk ditampilkan di browser.

Metode outCategory(), seperti yang bisa kita lihat, mengambil dua parameter @array dan @string di parameter pertama sebuah array dengan semua kategori, dan yang kedua sebuah string yang berisi nilai pilihan atau meja, nilai ini menentukan jenis kode HTML yang akan dihasilkan.
Arti pilihan

Lihat Kode HTML

Untuk memasukkan kode HTML yang diberikan ke bidang pilih dari formulir apa pun.

Arti meja- menghasilkan kode HTML berikut:

Lihat Kode HTML

Kode HTML ini berguna untuk ditempelkan ke tabel yang menampilkan semua subkategori kategori kami.

Kelas juga memiliki metode berikut:
hapusItem($id);- menghapus satu kategori, meskipun ada yang bersarang
delCategory($array, $id);- menghapus kategori dengan semua subkategori bersarang, $array - larik dengan semua kategori yang disiapkan oleh metode $category->getCategory(), $id - nomor kategori yang akan dihapus
Tambahkan Barang();- metode ini harus dipanggil jika ingin menambahkan kategori, sedangkan metode ini membaca nilai dari data yang dikirimkan dengan metode POST, yaitu. dari larik $_POST.
$name=$this->PHP_slashes(strip_tags($_POST['nama'])); // Nama Kategori
$podcat=intval($_POST['podcat']); // ID dari kategori induk, jika 0 ditentukan, kategori tersebut akan berada di root.
updateItem(); - mirip dengan metode sebelumnya, kecuali bahwa metode ini memperbarui kategori, nama, dan level bersarangnya.

tabel="kategori"; // permintaan untuk memilih daftar kategori, nama tabel * $category->outCategory($category->getCategory()); // mempersiapkan output kategori (meminta array kategori) * echo $category->html; // tampilkan kategori dalam nama HTML * */ /** * Buang tabel yang sedang dikerjakan * * JATUHKAN TABEL JIKA ADA `kategori`; * CREATE TABLE `category` (* `id` int(11) NOT NULL auto_increment, * `podcat` int(11) NOT NULL, * `name` varchar(255) NOT NULL, * PRIMARY KEY (`id`), * KEY `id` (`id`) *) ENGINE=MyISAM DEFAULT CHARSET=utf8; * */ class TreeCategory ( /** * Database query string */ var $table; /** * Database interface */ var $DB; /** * Array kategori dengan subkategori bersarang */ var $arrayCat; / ** * Hitung otomatis jumlah tanda hubung sebelum nama kategori saat menampilkan */ var $countPodcat; /** * Kode HTML untuk menampilkan kategori dengan subkategori */ var $html; /** * Dapatkan antarmuka untuk bekerja dengan database dan memasukkannya ke dalam variabel lokal */ function __construct($DB) ( $this->DB=$DB; $this->component=$_GET["component"]; ) /** * Mendapatkan daftar kategori, urutkan dan menempatkan ke dalam array dengan array bersarang, dll. * @return kategori array */ function getCategory () ( $all = $this->DB->getAll("SELECT * FROM `($this->table)` ORDER BY `id` ASC"); $path = array(); if(count($all)>0) ( foreach($all as $item): if($item["podcat"]==0)$sort[ $item[ "id"]]=$item; if($item["podcat"]>0) ( if(isset($path[$item["podcat"]])) ( $str="$sort" ; foreach( $path[$item["podcat"]] sebagai $pitem): $rep =$item["podcat"]; $str.="[$pitem]"; akhir untuk setiap; $str.="[($item["podcat"])]"; $str.="[($item["id"])]"; $str.="=$barang;"; eval($str); foreach($path[$item["podcat"]] sebagai $pitem): $path[$item["id"]]=$pitem; akhir untuk setiap; $path[$item["id"]]=$item["podcat"]; ) lainnya ( $sort[$item["podcat"]]["sub"][$item["id"]]=$item; $path[$item["id"]]=$item["podcat" ]; ) ) endforeach; ) $this->arrayCat=$sort; kembalikan $this->arrayCat; ) /** * Mencetak kategori, meletakkan HTML yang telah selesai dalam $this->html * @param array Larik dengan kategori dan subkategori bersarang * @param string Jenis kode HTML yang dihasilkan ke keluaran, opsi, atau tabel */ function outCategory(& $arrayCat, $type="option", $idSel=0) ( foreach($arrayCat as $sub) ( $this->countPodcat++; $this->outItem($sub, $type); if(!empty($ sub[" sub"]))$this->outCategory($sub["sub"], $type, $idSel); $this->countPodcat--; ) ) /** * Metode pembantu untuk menyiapkan kode HTML * @param array Larik dengan kategori * @param string Jenis kode HTML yang dihasilkan ke keluaran, opsi, atau tabel */ function outItem($sub, $type="option", $idSel=0) ( for($i=0;$ icountPodcat;$i++) ($keluar. ="-"; ) if($idSel==$sub["id"])$se="dipilih"; lain $se=""; if($type=="option")$this->html.=" ($out) ($sub["nama"]) "; if($type=="table")$this->html.= ($keluar) ($sub["nama"]) HTML; ) fungsi delCategory(&$a_tree,&$id=0) ( foreach($a_tree as $sub) ( if($sub["id"]$id dan isset($sub["sub"]))$ini- >delCategory($sub["sub"],$id); if($sub["id"]==$id) ( $sql="HAPUS DARI ($ini->tabel) WHERE id = "$id" LIMIT 1"; $this->DB->execute($sql); if (isset($sub["sub"])) $this->delCategory_process($sub["sub"]); ) ) ) function delCategory_process (&$a_tree) ( foreach($a_tree as $sub) ( $sql="DELETE FROM ($this->table) WHERE id = "($sub["id"])" LIMIT 1"; $this-> DB->execute($sql); if(isset($sub["sub"]))$this->delCategory_process($sub["sub"]); ) ) fungsi updateItem() ( $name=$ini- >PHP_slashes(strip_tags($_POST["nama"])); $podcat=intval($_POST["podcat"]); $id=intval($_POST["id"]); $sql="UPDATE `( $this->table)` SET `name` = "($name)",`podcat` = "($podcat)" WHERE `id`="($id)" LIMIT 1; "; $this->DB ->execute($sql); ) function addItem() ( $name=$this->PHP_slashes(strip_tags($_POST["nama"])); $podcat=intval($_POST["podcat"]); $ id=intval($_POST["id"]); $sql="I NSERT INTO `($this->table)` (`id`,`podcat`,`name`) NILAI ("", "$podcat", "$name");"; $this->DB->execute($sql); ) function deleteItem($id) ( $id=intval($id); $sql="HAPUS DARI `($this->table)` WHERE `id` = "($id)" LIMIT 1"; $DB- >execute($sql); header("Location: ?component=($this->component)"); ) function PHP_slashes($string,$type="add") ( if ($type == "add") ( if (get_magic_quotes_gpc()) ( return $string; ) else ( if (function_exists("addslashes")) ( return addlashes($string); ) else ( return mysql_real_escape_string($string); ) ) ) else if ($type == "strip") ( return stripslashes($string); ) else ( die("error pada PHP_slashes (campuran,tambahkan | strip)"); ) ) )

Seluruh kelas ditulis dalam waktu satu jam dan, tentu saja, memiliki kekurangan, tetapi semua ini dapat diperbaiki. Penggunaannya disarankan untuk tujuan pendidikan, meskipun omong-omong, setelah menyelesaikannya sedikit, Anda dapat menyematkannya ke sistem apa pun dan menikmati pekerjaannya)).

Saya akan berterima kasih jika di komentar Anda menawarkan opsi Anda sendiri untuk menyelesaikan masalah ini - mengatur kategori tingkat bersarang tak terbatas.