سعید شعبانی

جدا سازی تگ های html بر اساس کلاس آنها در php

4 پست در این موضوع قرار دارد

دوستان عزیز سلام

 

بعد از مدت های زیادی برای من سعادت بزرگی هست که در جمع دوستان وردپرس پارسی هستم. راستش نیاز به یک کد دارم تا بتونه در یک string که داخل یک متغییر php ذخیره شده جستجو کنه و یک تگ با یک class خاص را پیدا و کل اون تگ با محتویات داخلش را برگردونه. مثل نمونه زیر :

متغییر string با این مقدار هست:

$string = '<div class="page><span>hello</span> <div class="one">one</div><div class="two">two</div><div class="ok">ok</div></div>';

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

$result = get_html_content('.two');

و در نهایت خورجی بشه:

<div class="two">two</div>

 

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

0

به اشتراک گذاری این پست


لینک به پست

سلام و درود

 

تابع get_html_content به شکل زیر میشه:

function get_html_content($str, $selector) {
	
	$mode = substr($selector, 0, 1);

	switch($mode) {
		
		case "#":
			$id = ltrim($selector, "#");
			$xpath_selector = "//*[@id='$id']";
			break;
		case ".":
			$class = ltrim($selector, ".");
			$xpath_selector = "//*[@class='$class']";
			break;
		default:
			$xpath_selector = "//$selector";
		
	}

	$dom = new DOMDocument();
	@$dom->loadHTML(mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8'));
	$xpath = new DOMXpath($dom);
	$xpq = $xpath->query($xpath_selector);

	if($xpq->length === 0)
		return "هیچ موردی یافت نشد";
		
	return trim(preg_replace('/^<!DOCTYPE.+?>/', '', str_replace(array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML($xpq->item(0)))));
	
}

 

و مثلا بخواید کل div هایی که کلاسشون two هست رو براتون نمایش بده این شکلی میشه:

$str = '<div class="page"><span>hello</span><div class="one">one</div><div class="two">two</div><div class="ok">ok</div></div>';
$result = get_html_content($str, ".two");

 

البته سلکت بر اساس آیدی و نام تگ هم ساپورت میکنه.

 

موفق باشید

2

به اشتراک گذاری این پست


لینک به پست

خیلی ممنونم

0

به اشتراک گذاری این پست


لینک به پست
در 7 دقیقه قبل، سعید شعبانی گفته است :

خیلی ممنونم

خواهش میکنم.

موفق باشید

0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط yaali
      سلام
      من با این کد، محتویات 2 دسته رو فیلتر میکنم.
      دسته اول و دسته دوم. وقتی دسته اول رو انتخاب میکنید، زبانه ای در زیر اون باز میشه و گزینه های مربوط به اون دسته رو نشون میده.
      دسته دوم هم همینطور.
      ولی مشکلم اینه که وقتی دسته ها خالی هم هستن و اصلا گزینه ای برای انتخاب ندارن، باز زبانه ی بازشو به نمایش در میاد.
      من میخوام به جای اینکه زبانه ی بازشو زیرش ظاهر بشه ولی چیزی توش نباشه، اصلا به کلی نمایش داده نشه.
      امیدوارم تونسته باشم منظورم رو برسونم.
      <option selected="" value="prepaid-list">دسته 1</option> <option value="none-paid-list">دسته 2</option> </select> </div> <select name="wc_elemanha_payment_plan" id="wc-d-se" style="width: 98%;margin:6px 1% "> <?php $pl_counter=0;$user_m_flag=0; foreach( WC_elemanhas_Plans_Manager::get_plans_for_product( $post->ID ) as $key => $plan ) : $check_user_m = $plan->get_user_m(); $plan_pre_paid_value = $plan->get_plan_pre_paid(); if($plan_pre_paid_value!='prepaid'){ $plan_pre_paid_value='noneprepaid'; } if($check_user_m==1){ $user_m_active = 'on'; $user_m_flag= 'on'; $user_m_min=$plan->get_user_m_min(); $user_m_max=$plan->get_user_m_max(); if($user_m_min !='' && is_numeric($user_m_min)){ $totalp=get_post_meta($post->ID,"_regular_price",TRUE); $user_m_min = ($user_m_min * $totalp) / 100; $user_m_max = ($user_m_max * $totalp) / 100; } }else{ $user_m_active= 'off'; } $pl_counter++; ?> <option class="wc-elemanhas-payment-plan" data-target="<?php print $plan_pre_paid_value; ?>" data-id="<?php print $user_m_active; ?>" <?php selected( $key, 0 ); ?> value="<?php echo esc_attr( $plan->get_id() ); ?>" id="wc-elemanhas-payment-plan-<?php echo esc_attr( $plan->get_id() ); ?>"> <?php echo esc_html( $plan->get_name() ); ?> </option> <?php endforeach; ?> </select> <?php if($pl_counter>1){ $dep_m_style="display: none"; }else{ $dep_m_style="display: block"; } if($user_m_flag=="on"): ?>  
    • توسط madidi
      سلام من همیشه واسه وردپرس که قالب مینویسم یه  مشکل دارم 
      توی تصویر زیر کامل توضیح دادم 
      چطوری تو یه دیو بزرگ دو تا دیو تعریف کنیم یکی متن و یکی عکس و وقتی دیو عکس تموم شده متن ها بقیه جاهای دیو بزرگ تر پر کنند ؟؟؟
      ممنون 

    • توسط mansarifar
      توی پوسته jobmonster  که یک پوسته کاریابیه. رزومه کارجو ها رو فقط کسانی که شغل تعریف می کنند میتونن ببینن. میخواستم این دسترسی رو تغییر بدم . یعنی همه بتونن ببینن.کسی می تونه کمک کنه؟ ممنون میشم
    • توسط mehran4ever
      سلام دوستان
      من در خواست بومی سازی و فارسی سازی این افزونه رو داشتم
      https://wordpress.org/plugins/erp/
       
      ممنون میشم کمک کنید
      با تشکر
    • توسط sanjesh_88
      سلام دوستان
      بنده یک سیستم نظر دهی با php برای وبسایتم نوشتم که id هر نظر را می گیرد id$ ذخیره می کند
      $sql="select * from tblabc where idpost=".intval($_GET['page'])." order by id88 desc"; $stmt=$db->prepare($sql); $stmt->execute(); while($result=$stmt->fetch(PDO::FETCH_ASSOC)){ $id=$result['idsanjesh88']; echo' <div id="nazar"> <div id="nazar_footer"> <div onClick="report1( '.$id.')" id="report">report <img class="mosalas" id="xxx" src="img/login_content_top.png" style="position:absolute; top:4px; right:0px;z-index:2; opacity:0; "> </div><!--report--> </div> </div> حالا می خواهم با دستور onclik اون تصاویری که به نام mosals هست را برا هر پستی که روی آن کلیک می کند (روی دکمه report مربوط به هر پست) اون تصاویر نمایش داده بشود ولی متاسفانه اون تصاویر برای همه ی پست های موجود opacity اش برابر 1 می شود در حالی که بنده می خواهم برای هر پستی که روی آن کلیک می کنیم این فانکشن اجرا بشه.
      <script> function report1(id){ $('.mosalas').animate({opacity:1},700) }; </script> اگر کسی کمک کنه ممنون میشم