Пожалуйста, помогите объединить две php функции

12
S
На сайте с 13.11.2012
Offline
72
2645

Две функции ниже


protected function getcates($nom){
$part = "snippet";

$js=file_get_contents('https://glopart.ru/ads/adunit/4031/script.js');
if(preg_match('#push\((?<json>.*?)\);#',$js,$match)){
$wares=json_decode($match['json'])->wares;
foreach ($wares as $item) {
$arr1 = array('"', ' ', '/', '#');
$arr2 = array("", '+', '-', '');
$itemtitle=str_replace($arr1, $arr2, $item->title);
}
}

$this->url = "https://www.googleapis.com/youtube/v3/search?key={$this->config["key"]}&part=$part&order={$this->config[$nom.'sortingresults']}&maxResults={$this->config[$nom.'number']}&q=$itemtitle&videoEmbeddable=true&videoSyndicated=true&type=video";
$data = $this->http(TRUE);
$html = "";
foreach ($data->items as $yt) {
$html .= $this->listQueryVideo($yt);
}
return $html;
}



protected function listQueryVideo($yt){

global $listQueryVideoHit;

if (!isset($listQueryVideoHit))
$listQueryVideoHit = 0;

elseif($listQueryVideoHit === 3)
$listQueryVideoHit = 0;

return "'$itemtitle'<div class='div_topic_cover topic_cover_".(++$listQueryVideoHit)." reviews'>
<a href=\"".Main::href("video/{$yt->id->videoId}")."\" class=\"a_topic_cover\">
<img src=\"/themes/images/icon/blank_275x180.png\" class=\"img_topic_cover\" alt=\"{$yt->snippet->title}\" style=\"background: url(https://img.youtube.com/vi/{$yt->id->videoId}/mqdefault.jpg;);\">
<div class=\"div_topic_cover_caption\">{$yt->snippet->title}</div>
</a>
</div>";
}

Первая парсит ролики с youtube

Вторая выводит результат на сайт

В первой функции, в url, есть параметр q=$itemtitle

Мне нужно, чтобы данный параметр выводил результат и во второй функции.

То есть, если в первой функции, методом $js=file_get_contents

$itemtitle был, скажем "Вася", то и во второй функции я должен получить "Вася".

Пробовал так сделать, объединить функции

protected function getcates($nom){
$part = "snippet";

$js=file_get_contents('https://glopart.ru/ads/adunit/4031/script.js');
if(preg_match('#push\((?<json>.*?)\);#',$js,$match)){
$wares=json_decode($match['json'])->wares;
foreach ($wares as $item) {
$arr1 = array('"', ' ', '/', '#');
$arr2 = array("", '+', '-', '');
$itemtitle=str_replace($arr1, $arr2, $item->title);
}
}

$this->url = "https://www.googleapis.com/youtube/v3/search?key={$this->config["key"]}&part=$part&order={$this->config[$nom.'sortingresults']}&maxResults={$this->config[$nom.'number']}&q=$itemtitle&videoEmbeddable=true&videoSyndicated=true&type=video";
$data = $this->http(TRUE);
$html = "";
foreach ($data->items as $yt) {
$html .= $this->listQueryVideo($yt);
}



global $listQueryVideoHit;

if (!isset($listQueryVideoHit))
$listQueryVideoHit = 0;

elseif($listQueryVideoHit === 3)
$listQueryVideoHit = 0;

return "'$itemtitle'<div class='div_topic_cover topic_cover_".(++$listQueryVideoHit)." reviews'>
<a href=\"".Main::href("video/{$yt->id->videoId}")."\" class=\"a_topic_cover\">
<img src=\"/themes/images/icon/blank_275x180.png\" class=\"img_topic_cover\" alt=\"{$yt->snippet->title}\" style=\"background: url(https://img.youtube.com/vi/{$yt->id->videoId}/mqdefault.jpg;);\">
<div class=\"div_topic_cover_caption\">{$yt->snippet->title}</div>
</a>
</div>";



}

работает но выводит один ролик вместо заданных 6 :(

Пожалуйста, помогите верно объединить функции, чтобы в результатах второй работало $itemtitle

Если во вторую функцию, вновь добавить

..... $js=file_get_contents('https://glopart.ru/ads/adunit/4031/script.js');.......

работать будет но значения $itemtitle будут разными :(

Спасибо!

totamon
На сайте с 12.05.2007
Offline
437
#1

если вам кто-то написал эти функции почему бы не попросить их объединить? если вы сами их написали тем более странно)

но попробуйте так


protected function getcates($nom){
global $listQueryVideoHit;

$part = "snippet";

$js=file_get_contents('https://glopart.ru/ads/adunit/4031/script.js');
if(preg_match('#push\((?<json>.*?)\);#',$js,$match)){
$wares=json_decode($match['json'])->wares;
foreach ($wares as $item) {
$arr1 = array('"', ' ', '/', '#');
$arr2 = array("", '+', '-', '');
$itemtitle=str_replace($arr1, $arr2, $item->title);
}
}

$this->url = "https://www.googleapis.com/youtube/v3/search?key={$this->config["key"]}&part=$part&order={$this->config[$nom.'sortingresults']}&maxResults={$this->config[$nom.'number']}&q=$itemtitle&videoEmbeddable=true&videoSyndicated=true&type=video";
$data = $this->http(TRUE);
$html = "";
foreach ($data->items as $yt) {

if (!isset($listQueryVideoHit))
$listQueryVideoHit = 0;

elseif($listQueryVideoHit === 3)
$listQueryVideoHit = 0;

$html .= "'$itemtitle'<div class='div_topic_cover topic_cover_".(++$listQueryVideoHit)." reviews'>
<a href=\"".Main::href("video/{$yt->id->videoId}")."\" class=\"a_topic_cover\">
<img src=\"/themes/images/icon/blank_275x180.png\" class=\"img_topic_cover\" alt=\"{$yt->snippet->title}\" style=\"background: url(https://img.youtube.com/vi/{$yt->id->videoId}/mqdefault.jpg;\">
<div class=\"div_topic_cover_caption\">{$yt->snippet->title}</div>
</a>
</div>";
}
return $html;
}
Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
S
На сайте с 13.11.2012
Offline
72
#2

totamon, огромное вам спасибо!

Работает как надо!

Уже думал, что не найду решение.

Функции я переписал сам...

S
На сайте с 13.11.2012
Offline
72
#3

Хотел еще поинтересоваться, в строке

$this->url = "https://www.googleapis.com/youtube/v3/search?key={$this->config["key"]}&part=$part&order={$this->config[$nom.'sortingresults']}&maxResults={$this->config[$nom.'number']}&q=$itemtitle&videoEmbeddable=true&videoSyndicated=true&type=video";

$itemtitle можно как-то заменить на '.urlencode($itemtitle).'

или это только в echo возможно?

Спасибо!

Segey
На сайте с 23.08.2005
Offline
404
#4

Smirnof,

Там только кавычки не двойные.... А не одинарные, проще всегда проверить.

Brexit - уже совсем рядом. (https://about-this-model.blogspot.com/2019/03/brexit.html)
S
На сайте с 13.11.2012
Offline
72
#5

Segey, спасибо!

Теперь буду проверять.

S
На сайте с 13.11.2012
Offline
72
#6

В результате получил код:


protected function getcates($nom){
// global $listQueryVideoHit;

$part = "snippet";

$js=file_get_contents('https://glopart.ru/ads/adunit/4031/script.js');
if(preg_match('#push\((?<json>.*?)\);#',$js,$match)){
$wares=json_decode($match['json'])->wares;
foreach ($wares as $item) {

$arr1 = array('"', ' ', '/', '#');
$arr2 = array("", '+', '-', '');
$itemtitle=str_replace($arr1, $arr2, $item->title);
}
}

echo '<div class="div_index_topics_block"><a href="/search/'.urlencode($itemtitle).'" class="div_index_caption2 reviews">'.($item->title).'</a>';

$this->url = "https://www.googleapis.com/youtube/v3/search?key={$this->config["key"]}&part=$part&order={$this->config[$nom.'sortingresults']}&maxResults={$this->config[$nom.'number']}&q=".urlencode($itemtitle)."&videoEmbeddable=true&videoSyndicated=true&type=video";
$data = $this->http(TRUE);
$html = "";
foreach ($data->items as $yt) {

if (!isset($listQueryVideoHit))
$listQueryVideoHit = 0;

elseif($listQueryVideoHit === 3)
$listQueryVideoHit = 0;

$html .= "111<div class='div_topic_cover topic_cover_".(++$listQueryVideoHit)." reviews'>
<a href=\"".Main::href("video/{$yt->id->videoId}")."\" class=\"a_topic_cover\">
<img src=\"/themes/images/icon/blank_275x180.png\" class=\"img_topic_cover\" alt=\"{$yt->snippet->title}\" style=\"background: url(https://img.youtube.com/vi/{$yt->id->videoId}/mqdefault.jpg;\">
<div class=\"div_topic_cover_caption\">{$yt->snippet->title}</div>
</a>
</div>
222";
}
return $html;

}

// global $listQueryVideoHit; пришлось закомментировать, так-как, вроде из-за этого съезжали настройки

if (!isset($listQueryVideoHit))
$listQueryVideoHit = 0;

elseif($listQueryVideoHit === 3)
$listQueryVideoHit = 0;

как закомментировал, все встало на места.

Верно сделал?

Еще в код я добавил

echo '<div class="div_index_topics_block"><a href="/search/'.urlencode($itemtitle).'" class="div_index_caption2 reviews">'.($item->title).'</a>';

данная строка отображается (выводится) один раз.

Пожалуйста, подскажите, как вывести подобную строку после выполнения $html .= " так, чтобы она отображалась тоже один раз (оформление блока на сайте).

Часто, $html .= " возвращается пустым и на сайте остается пустой блок, как скрыть блок если $html .= " пуст?

Спасибо!

p.s. ранее блок проверял так <?php if(isset($this->config["onecatename"]) && $this->config["onecatename"]!=''):?>...<?php endif;?>

но теперь в конфиге данных нет и проверить нечего...

totamon
На сайте с 12.05.2007
Offline
437
#7

перед return $html;

if(!empty($html)){

$html = '<div class="div_index_topics_block"><a href="/search/'.urlencode($itemtitle).'" class="div_index_caption2 reviews">'.($item->title).'</a>'.$html;
}
S
На сайте с 13.11.2012
Offline
72
#8

Так сделал

}

if(!empty($html)){

$html = 'ооооооооооооооо'.$html;
}

return $html;
}

вывод идет сразу после </a> в первом echo '

т.е. до выполнения $html .= "

totamon
На сайте с 12.05.2007
Offline
437
#9

ну так первый echo совсем уберите... вам же не нужно его выводить если $html пустой, или что нужно?)

S
На сайте с 13.11.2012
Offline
72
#10

а.... щас потестирую :)

я думал это код для нижнего оформления блока, после выполнения $html .= "

---------- Добавлено 25.02.2017 в 21:09 ----------

totamon, спасибо, блок стал исчезать! :)

Пошел подробнее разбираться...

---------- Добавлено 25.02.2017 в 21:13 ----------

А как вывести код после выполнения $html .= "

это


}

if(!empty($html)){

$html = '.......код.......'.$html;
}

return $html;
}

до $html .= "

а после как вывести?



---------- Добавлено 25.02.2017 в 22:50 ----------

Разобрался! :)

totamon, спасибо!

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий