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

short_name
logo
description
promolink
date_end



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

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

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

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

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

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

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

вы лучший)

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



а как добавить логотип и описание?
...
Рейтинг: 0 / 0
28.01.2015, 15:06
    #38865563
alexssses
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из xml в php
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
28.01.2015, 17:18
    #38865745
alexssses
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из xml в php
r u,

вы не можете подсказать каким образом на этом сайте promokodi.ru
сделали выделение купонов до окончания которых осталось несколько дней или часов?
И еще вопрос а как можно преобразовать дату ну в более нормальную как на этом сайте?
...
Рейтинг: 0 / 0
29.01.2015, 06:00
    #38866154
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из xml в php
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
30.01.2015, 19:53
    #38868174
alexssses
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из xml в php
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
30.01.2015, 22:36
    #38868240
kunaksergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из xml в php
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
30.01.2015, 23:57
    #38868262
alexssses
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из xml в php
kunaksergey,

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

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

а как сделать что бы писалось ДНЯ ДНЕЙ?
не подскажите?)
...
Рейтинг: 0 / 0
31.01.2015, 00:07
    #38868267
alexssses
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из xml в php
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
31.01.2015, 00:12
    #38868268
alexssses
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из xml в php
хотя нет, цикл тот же...
совем запутался
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод данных из xml в php / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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