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

انتخاب اولین عضو در phpQuery

انتخاب اولین عضو در phpQuery
انتخاب اولین عضو در phpQuery

سلام

آموزش قبلی که درباره شروع کدنویسی با phpQuery بود و خب کلیات استفاده از phpQuery همون بود.

اما مهم تر از اون تکنیک ها و نکاتی هست که توی این کتابخونه جادویی وجود داره.

خب توی jQuery و CSS وقتی میخوایم اولین عضو رو انتخاب کنیم، جلو سلکتور :first-child رو مینویسم و همه چی حل میشه. این روش گاهی توی 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 phpQuery::newDocumentHTML( $html ); $links = &quot"

* استفاده خیلی ساده از حلقه foreach()

میدونید دیگه میشه توی foreach از عملگر break استفاده کرد. پس وقتی برای یه بار حلقه رو رفت، دستور break میزاریم که از حلقه بیاد بیرون.

همیشه برای حل یه مسئله چندین روش وجود داره. توی تمام این روش هایی که نوشتم هم میتونید از pq() استفاده کنید هم از آرایه $doc .

  • استفاده از تابع pq()
foreach( pq( &quot.c-listing .c-listing__items li a.c-product-box__img&quot ) as $product_a ) { $link = &quothttps://www.digikala.com&quot . pq( $product_a )->attr( &quothref&quot ); break; }
  • استفاده از آرایه $doc
foreach( $doc[ &quot.c-listing .c-listing__items li a.c-product-box__img&quot ] as $product_link ) { $link = &quothttps://www.digikala.com&quot . pq( $product_a )->attr( &quothref&quot ); break; }

* استفاده از :first-child

استفاده از تابع pq()

foreach( pq( &quot.c-listing .c-listing__items li:first-child a.c-product-box__img&quot ) as $product_a ) { $link = &quothttps://www.digikala.com&quot . pq( $product_a )->attr( &quothref&quot ); }
  • استفاده از آرایه $doc
foreach( $doc[&quot.c-listing .c-listing__items li:first-child a.c-product-box__img&quot] as $product_a ) { $link = &quothttps://www.digikala.com&quot . pq( $product_a )->attr( &quothref&quot ); }

* استفاده از تابع eq() و تابع find()

با تابع eq() شما میتونید بهش بگید چندمین عضو(فرزند) رو انتخاب کنه. اولین فرزند هم از 0 شروع میشه. این تابع رو هم توی jQuery داریم.

تابع find() همونطور که از اسمش معلومه و توی jQuery هم داریم، کارش پیدا کردن یه سلکتور خاصه. برای این روش هم میتونم کد رو به چند صورت بنویسیم:

  • استفاده از تابع pq()
foreach( pq( &quot.c-listing .c-listing__items li&quot )->eq( 0 )->find( &quota.c-product-box__img&quot ) as $product_a ) { $link = &quothttps://www.digikala.com&quot . pq( $product_a )->attr( &quothref&quot ); }
  • استفاده از آرایه $doc
foreach( $doc[&quot.c-listing .c-listing__items li&quot]->eq( 0 )->find( &quota.c-product-box__img&quot ) as $product_a ) { $link = &quothttps://www.digikala.com&quot . pq( $product_a )->attr( &quothref&quot ); }

* استفاده از تابع filter() و find()

کار تابع filter() مثل تابع filter() توی jQuery هست. و میشه کارهای خاصی روی سلکتور انجام داد.

  • استفاده از تابع pq()
foreach( pq( &quot.c-listing .c-listing__items li&quot )->filter( &quot:first&quot )->find( &quota.c-product-box__img&quot ) as $product_a ) { $link = &quothttps://www.digikala.com&quot . pq( $product_a )->attr( &quothref&quot ); }
  • استفاده از آرایه $doc
foreach( $doc[&quot.c-listing .c-listing__items li&quot]->filter( &quot:first&quot )->find( &quota.c-product-box__img&quot ) as $product_a ) { $link = &quothttps://www.digikala.com&quot . pq( $product_a )->attr( &quothref&quot ); }


* ترکیب :first-child و تابع find()

میتونید روش ها رو با هم ترکیب هم کنید. مثلا میشه :first-child رو با find() هم ترکیب کرد:

  • استفاده از تابع pq()
foreach( pq( &quot.c-listing .c-listing__items li:first-child&quot )->find( &quota.c-product-box__img&quot ) as $product_a ) { $link = &quothttps://www.digikala.com&quot . pq( $product_a )->attr( &quothref&quot ); }
  • استفاده از تابع $doc
foreach( $doc[&quot.c-listing .c-listing__items li:first-child&quot]->find( &quota.c-product-box__img&quot ) as $product_a ) { $link = &quothttps://www.digikala.com&quot . pq( $product_a )->attr( &quothref&quot ); }


خب امیدوارم این آموزش هم براتون مفید باشه و حداقل مشکلی رو حل کرده باشه د:

دریافت سورس این قسمت

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