محمدجعفر خواجه
محمدجعفر خواجه
خواندن ۱ دقیقه·۵ سال پیش

شروع کدنویسی با phpQuery

شروع کدنویسی با phpQuery
شروع کدنویسی با phpQuery

سلام

توی مقاله قبلی درباره خود phpQuery توضیح دادم. الان شروع کنیم برای کد نویسی.

خب از اول همه اینکه phpQuery شی گراست و کلاس داره. برای شروع باید بدونید که شما نمیتونید به phpQuery آدرس(url) بدید و باید کد تحویلش بدید. مثلا کد HTML, XML و... . توابعی که داره برای شروع رو اینجا لیست کردم:

$doc = phpQuery::newDocumentHTML( $markup ); $doc = phpQuery::newDocumentXML(); $doc = phpQuery::newDocumentFileXHTML( 'test.html' ); $doc = phpQuery::newDocumentFilePHP( 'test.php' ); $doc = phpQuery::newDocument( 'test.xml', 'application/rss+xml' ); $doc = phpQuery::newDocument( '<div/>' );

توی jQuery هر موقع می خوایم ازش استفاده کنیم معمولا از تابع $() استفاده می کنیم. اینجا هم مثل jQuery یه تابع داریم به نام pq(). برای درک راحتترش، هر جایی که توی jQuery از $() استفاده می کردیم، الان اینجا از pq() استفاده کنید.

کلاً میشه گفت تابع pq() سلکتور PhpQuery هست.

مثال عملی

خب به عنوان مثال برای درک بهتر نحوه کد نویسیش، فرض کنید میخوایم لیست تمام گوشی های سامسونگ دیجی کالا رو توی دسته بندی خودش اونم توی صفحه اولش بگیریم و توی یه آرایه ذخیره کنیم:

<?php // Include phpQuery include_once( &quotphpQuery/phpQuery.php&quot ); // Get page source $html = file_get_contents( &quothttps://www.digikala.com/search/category-mobile-phone/?q=%D8%B3%D8%A7%D9%85%D8%B3%D9%88%D9%86%DA%AF&entry=mm&quot ); // Init phpQuery $doc = phpQuery::newDocumentHTML( $html ); $links = array(); foreach( pq( &quot.c-listing .c-listing__items li a.c-product-box__img&quot ) as $a ) { $links[] = &quothttps://www.digikala.com&quot . pq( $a )->attr( &quothref&quot ); } print_r( $links );

خب کد تقریبا واضح هست. اما در هر حال توضیح لازمه.

فایل اصلی phpQuery رو که از گیت هاب دانلود شده فراخوانی می کنیم:

include_once( &quotphpQuery/phpQuery.php&quot );

با تابع file_get_contents() شما میتونید محتویات یه فایل رو بخونید اما این تابع میتونه سورس یه صفحه وب رو هم بخونه. البته بهتره به جای استفاده از این روش از cURL استفاده کنید:

$html = file_get_contents( &quothttps://www.digikala.com/search/category-mobile-phone/?q=%D8%B3%D8%A7%D9%85%D8%B3%D9%88%D9%86%DA%AF&entry=mm&quot );

حالا که سورس صفحه رو داریم، باید سورس رو تحویل phpQuery بدیم. همونطور که اول کار لیست کردم توابع مختلفی داریم و تابعی که دقیقا برای کار با سورس های HTML هست، تابع newDocumentHTML() هستش:

$doc = phpQuery::newDocumentHTML( $html );

یه آرایه خالی میسازیم که بتونیم بعدا لینک ها رو داخلش ذخیره کنیم:

$links = array();

یه حلقه میسازیم که داخلش از تابع pq() استفاده شده. همونطور که میبینید مثل وقتی که با تابع $() توی jQuery کار می کنیم و بهش سلکتور CSS میدیم، اینجا هم دقیقا به همین صورت بهش میدیم.(البته برای حالت های خاص مثل :first-child و... در شرایطی خاصی کار میکنن که بهتره اینها رو قرار ندید و جلوتر میگم چطور حالت های مختلف رو پیاده سازی کنید).

این حلقه باعث میشه توی هر دور حلقه ما یکی از تگ های a که یکی از محصولات هست رو انتخاب کنیم:

foreach( pq( &quot.c-listing .c-listing__items li a.c-product-box__img&quot ) as $a ) {

خب حالا باید هر بار که حلقه اجرا میشه از تگ a، لینکش(href) رو دریافت کنه و به آرایه اضافه کنه:

$links[] = &quothttps://www.digikala.com&quot . pq( $a )->attr( &quothref&quot );

توی jQuery اگه مینوشتیم به این صورت میشد:

links.push( &quothttps://www.digikala.com&quot + $( a ).attr( &quothref&quot ) );

حالا میتونید شباهتشون رو به خوبی ببینید:

$() = pq() . = -> attr() = attr()

و در نهایت هم تمام اعضا آرایه رو نمایش میدیم:

print_r( $links );

توابع پرکاربرد phpQuery

بعضی از توابعی که پر استفاده هم اینجا لیست کردم که میتونید باهاشون کار کنید تا بهتر حساب کار دستتون بیاد:

pq( {selector} )->text(); // متن بین سلکتور را نمایش میده pq( {selector} )->html(); // کد HTML بین تگ را باز میگرداند pq( {selector} )->find( {tag} ); // داخل سلکتور دنبال یه تگ خاص میگرده

سورس کدی که الان نوشتیم

برنامه نویسیphpqueryqueryphpjquery
برنامه نویس وردپرس که دوست داره بعضی از اطلاعاتش رو با بقیه به اشتراک بزاره! د:
شاید از این پست‌ها خوشتان بیاید