powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод данных из xml в php
19 сообщений из 19, страница 1 из 1
Вывод данных из xml в php
    #38865245
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
уже несколько часов пилю гугл.
имеется xml фаил с купонами, нужно из него вывести рандомно несколько купонов (10 штук)

short_name
logo
description
promolink
date_end



подскажите как это можно реализовать)
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38865256
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexssses,

simplexml_load_file()
в цикле пробегаем по купонам, складываем в массив, перемешиваем массив. берем из массива первые 10 купонов
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38865257
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,

а можно подробнее плиз)
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38865259
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexssses,

пример файла, в студию
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38865278
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,

прикрепил xml фаил с купонами
сайт делаю на вордпресе
делал по статье http://vermutoff.com/sozdat-kuponnyj-sajt-na-wordpress-pod-admitad.html
там показывается как по ID выводить купоны, а я хочу на главной я хочу вывести 10 рандомно купонов.
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38865307
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexssses,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
$xml = simplexml_load_file( './cupons.xml' );
$coupons_cnt = sizeof($xml->coupons->coupon); // всего купонов
$n = 3; // кол-во случайных купонов
// генерируем случайные номера купонов
$ids = range(0, $coupons_cnt-1);
shuffle($ids);
$ids = array_slice($ids, 0, 3);
//
$out = array(); // тут будут лежать случайные купоны
$cnt=0; // счетчик
foreach($xml->coupons->coupon as $v) {
  if (in_array($cnt++,$ids)) {
    $out[] = $v;
  }
}// foreach
// результат
foreach($out as $v) {
  echo $v->name.'<br>';
}
// или 
//echo '<pre>';
//print_r($out);
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38865314
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

ой, вместо
$ids = array_slice($ids, 0, 3);
нужно
$ids = array_slice($ids, 0, $n);
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38865319
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,

приеду проверю огремнейшее спасибо гуру!)
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38865553
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,

вы лучший)

но у меня выходит только наименование
Код: sql
1.
echo $v->name.'<br>' ;



а как добавить логотип и описание?
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38865563
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,

разобрался

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
<style>
	
.coupon {
	clear: both;
	overflow: hidden;
	margin: 0 0 25px 0;
	padding: 10px;
	border: 1px dashed #b1b1b1;
	border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px;
	
}

.coupon .get-price {
	margin-top: 15px;
	color:red;
}

.coupon p {
	margin: 0;
}

.coupon .get-more {
	margin-top: 15px;
}
</style>


<?
$xml = simplexml_load_file( 'http://www.kupon/wp-content/themes/sevixwptheme/functions/xmls/cupons.xml' );
$coupons_cnt = sizeof($xml->coupons->coupon); // всего купонов
$n = 10; // кол-во случайных купонов
// генерируем случайные номера купонов
$ids = range(0, $coupons_cnt-1);
shuffle($ids);
$ids = array_slice($ids, 0, $n);
//
$out = array(); // тут будут лежать случайные купоны
$cnt=0; // счетчик
foreach($xml->coupons->coupon as $v) {
  if (in_array($cnt++,$ids)) {
    $out[] = $v;
  }
}// foreach
// результат
foreach($out as $v) {
  
  
                         echo '<div class="coupon">';
						 echo '<h3><b>'.$v->short_name.': </b>'.$v->name.'</h3>';
						 echo '<img src="'.$v->logo.'">';
						 echo '<p>'.$v->description.'</p>';
						 echo '<a target="_blanck" rel="nofollow" class="get-price" href="'.$v->promolink.'">Использовать промокод</a>';
						 echo '<p style="color: #888; margin: 10px 0; text-align: right;">Срок действия до '.$v->date_end.'</p>';
						 echo '</div>';
  

}
// или 
//echo '<pre>';
//print_r($out);
?>




все правильно?
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38865745
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,

вы не можете подсказать каким образом на этом сайте promokodi.ru
сделали выделение купонов до окончания которых осталось несколько дней или часов?
И еще вопрос а как можно преобразовать дату ну в более нормальную как на этом сайте?
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38866154
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexsssesвы не можете подсказать каким образом на этом сайте promokodi.ru
сделали выделение купонов до окончания которых осталось несколько дней или часов?
И еще вопрос а как можно преобразовать дату ну в более нормальную как на этом сайте?
ну анализируете поле date_end.
вычитаете из нее текущую дату = получаете сколько осталось в днях, минутах, секундах..как угодно
вспомогательные функции:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
function morph($n, $f1, $f2=false, $f5=false) {
	if (is_array($f1) && !$f2 && !$f5)
		list($f1,$f2,$f5) = $f1;
	$n = abs($n) % 100;
	$n1= $n % 10;
	if ($n>10 && $n<20) return $f5;
	if ($n1>1 && $n1<5) return $f2;
	if ($n1==1) return $f1;
	return $f5;
}
function times($from = 0, $to = 0, $rod=false) {
    if ($to==0) $to=time();
    $diff = abs($from - $to);
    if( ! $diff ) return;
    $units = array(
        'year'  => 31557600,
        'month' => 2635200,
        'week'  => 604800,
        'day' => 86400,
        'hour'  => 3600,
        'minute'=> 60,
        'second'=> 1
    );
    $titles = array(
        'year'  => array('год','года','лет'),
        'month' => array('месяц','месяца','месяцев'),
        'week'  => array('неделя','недели','недель'),
        'day' => array('день','дня','дней'),
        'hour'  => array('час','часа','часов'),
        'minute'=> array('минута','минуты','минут'),
        'second'=> array('секунда','секунды','секунд')
    );
    if ($rod) {
      $titles = array( // через 
          'year'  => array('год','года','лет'),
          'month' => array('месяц','месяца','месяцев'),
          'week'  => array('неделю','недели','недель'),
          'day' => array('день', 'дня','дней'),
          'hour'  => array('час',  'часа','часов'),
          'minute'=> array('минуту','минуты','минут'),
          'second'=> array('секунду','секунды','секунд')
      );
    }

    $str = array();
    foreach($units as $title => $length) {
      if ( ($d = floor($diff / $length)) ) {
        $str[] = $d . ' ' . morph($d, $titles[$title]);// . ($d > 1 ? '' : '');
        $diff -= $length * $d;
      }
      // We only want # (at most) unit $segments
      //if(count($str) === $segments)
        //break;
    }
    return join(', ', $str);
  }



далее, нужно немного изменить ваш код, где выводятся купоны
вместо
Код: php
1.
echo '<p style="color: #888; margin: 10px 0; text-align: right;">Срок действия до '.$v->date_end.'</p>';


вставить
Код: php
1.
echo '<p style="color: #888; margin: 10px 0; text-align: right;">Окончание срока действия, через : '.times(time(), strtotime($v->date_end) ).'</p>';
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38868174
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,

Огромное вам спасибо, только я вообще запутался( правда 2 дня пытался без помощи разобраться чуть не посидел(

1. проблема

в одном файле у меня выполняется такой код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
<?php
	if (!empty($_POST['post_id'])) { $post_id = $_POST['post_id']; }
	
	// если мы получили id posta, то продолжаем
	if($post_id) {
		$offers_id = get_post_meta($post_id, 'wpcf-offers_id', true); // получаем id нужного оффера для нужного поста и подставляем значение в URL
		$url = 'http://www.kupon/wp-content/themes/sevixwptheme/functions/xmls/cupons.xml'; // получили URL адрес для скачивания RSS фида с промокодами для нужного арендодателя
		
		$xml = simplexml_load_file($url); // проверяем существование этого фида
		
		// если RSS feed существует, то продолжаем
		if($xml) {
			
			// разбираем фид и извлекаем промокоды
			foreach ($xml->xpath('coupons/coupon') as $coupon) {
				if($coupon) {
				// если удалось извлечь купоны, то записываем полученные данные в строку
			
					if($coupon->advcampaign_id == $offers_id ) {
						$coupon_str .= '<div class="coupon">';
						$coupon_str .= '<h3><b>'.$coupon->short_name.': </b>'.$coupon->name.'</h3>';
						$coupon_str .= '<img src="'.$coupon->logo.'">';
						$coupon_str .= '<p>'.$coupon->description.'</p>';
						$coupon_str .= '<a target="_blanck" rel="nofollow" class="get-price" href="'.$coupon->promolink.'">Использовать промокод</a>';
						$coupon_str .= '<p style="color: #888; margin: 10px 0; text-align: right;">Срок действия до '.$coupon->date_end.'</p>';
						$coupon_str .= '</div>';
					
					} else { $e =''; $error = '<div style="padding: 50px; border: 1px dashed #888; margin: 25px 0;text-align: center;">Промокоды для этого магазина временно недоступны';}
			
				} else {
					$error = '<div style="text-align: center; width: 100%;padding: 15px;">Извините, промокоды для этого магазина временно отсутствуют</div>';
				}			
			} 
		} else { $error = 'XML не получен';}
			echo $coupon_str;
	} else { echo 'POST_ID не получен';}
?>



этот код выдает определенные записи из xml по ID
не могу подогнать 2 вариант кода (дни) под этот

2 код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
<?php
//Функция вычисления интервала
function interval($end){
$result=array(); //результат
$time_start=time(); //текущее время
$rel="/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/"; //регулярное выражение
preg_match($rel,$end,$match); //расспарсеный массив 
$year=$match[1];
$month=$match[2];
$day=$match[3];
$hour=$match[4];
$minute=$match[5];
$sec=$match[6];

$time_end=mktime($hour,$minute,$second,$month,$day,$year);  //конечная метка
$interval=$time_end-$time_start;  //интервал

$result= round($interval/60/60/24); //дней
//$result['hour']=round($interval/60/60); //часов
//$result['minute']=round($interval/60); //минут

return $result;

}

/****************************************/
$xml = simplexml_load_file( 'cupons.xml' );

$coupons_cnt = sizeof($xml->coupons->coupon); // всего купонов
$n = 10; // кол-во случайных купонов
// генерируем случайные номера купонов
$ids = range(0, $coupons_cnt-1);
shuffle($ids);
$ids = array_slice($ids, 0, $n);
//
$out = array(); // тут будут лежать случайные купоны
$cnt=0; // счетчик
foreach($xml->coupons->coupon as $v) {
  if (in_array($cnt++,$ids)) {
    $out[] = $v;
  }
}// foreach
// результат

foreach($out as $v) {
    $result=interval($v->date_end);
                         echo '<table style="border:1px solid gray; box-shadow: -11px 4px 5px; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px;">';
						 echo '<td style=" padding: 10px 10px; vertical-align: top;" rowspan="2"><img src="'.$v->logo.'"></td>';
						 echo '<td style="padding: 10px 10px;border-bottom: 1px solid; vertical-align: top; width: 73%;"><b style="font-size: 20px; font-family: Georgia, serif;">'.$v->short_name.':</b></td><tr><td style="vertical-align: top;"> '.$v->name.'</td></tr>';
						 echo '<td style="padding: 10px 10px;background-color: wheat; border-top: 1px solid; border-bottom: 1px solid;" colspan="3"><i>'.$v->description.'</i></td><tr>';
                         echo '<td style="padding: 10px 10px;vertical-align: top;"><b>Действителен до:</b> <br> <img style="width: 18px;" src="http://www.iconsearch.ru/uploads/icons/origami/128x128/clock.png">'.$v->date_end.' Действителен еще:'.$result.'</td>';						
						 echo '<td style="padding: 10px 10px;float: right; "><a class="button12" target="_blanck" rel="nofollow"  href="'.$v->promolink.'">Получить промокод</a></td>';
												 echo '</table>';
  
}
// или 
//echo '<pre>';
//print_r($out);
?>





тут все нормально, но время выводиться не очень хорошо, если например осталось меньше одного дня, ну несколько часов то просто стоит 0 дней, что бы я не пытался делать все равно не получается вывести часы и минуты
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38868240
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexssses,
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
<?php
//Функция вычисления интервала
function interval($end){
$result=array(); //результат
$time_start=time(); //текущее время
$rel="/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/"; //регулярное выражение
preg_match($rel,$end,$match); //расспарсеный массив 
$year=$match[1];
$month=$match[2];
$day=$match[3];
$hour=$match[4];
$minute=$match[5];
$sec=$match[6];



$time_end=mktime($hour,$minute,$second,$month,$day,$year);  //конечная метка
$interval=$time_end-$time_start;  //интервал
($interval>0)?$interval:$interval=0;
$match[8]=$interval;
$result['days']= intval($interval/86400); //дней
$result['hour']=intval(($interval-$result['days']*86400)/3600); //часов
$result['minute']=intval(($interval+59-$result['days']*86400-$result['hour']*3600)/60); //минут

return $result;

}

/****************************************/
$xml = simplexml_load_file( 'cupons.xml' );

$coupons_cnt = sizeof($xml->coupons->coupon); // всего купонов
$n = 10; // кол-во случайных купонов
// генерируем случайные номера купонов
$ids = range(0, $coupons_cnt-1);
shuffle($ids);
$ids = array_slice($ids, 0, $n);
//
$out = array(); // тут будут лежать случайные купоны
$cnt=0; // счетчик
foreach($xml->coupons->coupon as $v) {
  if (in_array($cnt++,$ids)) {
    $out[] = $v;
  }
}// foreach
// результат

foreach($out as $v) {
    $result=interval($v->date_end);
                         echo '<table style="border:1px solid gray; box-shadow: -11px 4px 5px; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px;">';
						 echo '<td style=" padding: 10px 10px; vertical-align: top;" rowspan="2"><img src="'.$v->logo.'"></td>';
						 echo '<td style="padding: 10px 10px;border-bottom: 1px solid; vertical-align: top; width: 73%;"><b style="font-size: 20px; font-family: Georgia, serif;">'.$v->short_name.':</b></td><tr><td style="vertical-align: top;"> '.$v->name.'</td></tr>';
						 echo '<td style="padding: 10px 10px;background-color: wheat; border-top: 1px solid; border-bottom: 1px solid;" colspan="3"><i>'.$v->description.'</i></td><tr>';
                         echo '<td style="padding: 10px 10px;vertical-align: top;"><b>Действителен до:</b> <br> <img style="width: 18px;" src="http://www.iconsearch.ru/uploads/icons/origami/128x128/clock.png">'.$v->date_end.' Действителен еще:'." {$result['days']} {$result['hour']}:{$result['minute']}".'</td>';						
						 echo '<td style="padding: 10px 10px;float: right; "><a class="button12" target="_blanck" rel="nofollow"  href="'.$v->promolink.'">Получить промокод</a></td>';
												 echo '</table>';
											
  
}
// или 
//echo '<pre>';
//print_r($out);
?>
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38868262
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kunaksergey,

"осталось 2015-02-01 23:59:00" - выводиться форматом "Действителен еще: 2 3:6"
это значит 2 дня 3 часа и 6 минут?
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38868263
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kunaksergey,

а да сори затупил) Спасибо!
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38868265
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kunaksergey,

а как сделать что бы писалось ДНЯ ДНЕЙ?
не подскажите?)
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38868267
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kunaksergey,
в прошлый раз

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
foreach($out as $v) {
		$result=interval($v->date_end);
		$str=$result.' д'. numberEnd($result, array('ень', 'ня', 'ней'));
		
							 echo '<table class="back" style=" box-shadow: 0px 3px 13px; border-bottom:1px solid red; background-image: url(http://www.kupon/wp-content/themes/sevixwptheme/images/bg_kupon.png);">';
							 echo '<td style=" padding: 10px 10px; vertical-align: top;" rowspan="2"><img src="'.$v->logo.'"></td>';
							 echo '<td style="padding: 10px 10px;border-bottom: 1px solid red; vertical-align: top; width: 73%;"><b style="font-size: 20px; color: #E31E24; font-family: Georgia, serif; "><img style="width: 24px; vertical-align: bottom;  " src="http://www.kupon/wp-content/themes/sevixwptheme/images/gift.png"> &nbsp;'.$v->short_name.':</b></td><tr><td style="vertical-align: top;"> <b style="color:#b4230c;">'.$v->name.'</b></td></tr>';
							 echo '<td style=" padding: 10px 10px; background-color: rgb(240, 240, 240); border-top: 4px solid rgb(170, 170, 170); border-bottom: 4px solid rgb(170, 170, 170);" colspan="3"><i>'.$v->description.'</i></td><tr>';
							 echo '<td style="padding: 10px 10px;vertical-align: top; color: rgb(227, 30, 36);"> <br> <img style="width: 25px;" src="http://www.kupon/wp-content/themes/sevixwptheme/images/clock.jpg"><b style="vertical-align: top;">'.$v->date_end.' Действителен:'.$str.'</b></td>';						
							 echo '<td style="padding: 10px 10px;float: right; "><a class="button12" target="_blanck" rel="nofollow"  href="'.$v->promolink.'"></a></td>';
													 echo '</table>';
	  
	}



мы с вами делали я вспомнил) но тут другой уже цикл...
...
Рейтинг: 0 / 0
Вывод данных из xml в php
    #38868268
alexssses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотя нет, цикл тот же...
совем запутался
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод данных из xml в php
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]