Проблема в том, что функция получив в ответ $js=file_get_contents 2 и более title использует один и по нему выдает результат.
То есть, если в админке я создал 5 блоков (вывидет 5 блоков с результатами на мой сайт) то $js=file_get_contents будет обработана 5 раз, из-за чего несколько блоков на сайте могут быть одинаковыми, так как результы выполнения пяти $js=file_get_contents частично могут быть одинаковыми (получим 5 title, 2 или 3 из которых могут быть идентичны), следовательно и на сайте будут повторы.
Как переписать или исправить мою функцию так, чтобы $js=file_get_contents выполнялась один раз и выводила столько блоков на сайте, сколько title было получено?
title ставится в поиск в строке $this->url --- q=".urlencode($itemtitle)."
Помогите пожалуйста, очень надо но я не осилю 100% :(
protected function getcates($nom){
$part = "snippet";
$js=file_get_contents('сайт.ру/script.js');
if(preg_match('#push\((?<json>.*?)\);#',$js,$match)){
$wares=json_decode($match['json'])->wares;
foreach ($wares as $item) {
$itemtitle = $item->title;
$itemtitle = preg_replace('/[^\p{L}0-9 \!]/iu', ' ', $itemtitle);
}
}
$this->url = "https://www.googleapis.com/youtube/v3/search?key={$this->config["key"]}&part=$part&order=date&maxResults=4&q=".urlencode($itemtitle)."&videoEmbeddable=true&videoSyndicated=true&type=video";
$data = $this->http(TRUE);
$html = "";
foreach ($data->items as $yt) {
$html .= "РЕЗУЛЬТАТ РАБОТЫ ФУНКЦИИ {$yt->id->videoId}{$yt->snippet->title}";
}
if(!empty($html)){
$html = 'шапка блока'.$html.'футер блока';
}
return $html;
}
Спасибо!
protected function getcates($nom){
$part = "snippet";
$js=file_get_contents('сайт.ру//…');
if(preg_match('#push\((?<json>.*?)\);#',$js,$match)){
$wares=json_decode($match['json'])->wares;
$titles = [];
foreach ($wares as $item) {
$itemtitle = $item->title;
$itemtitle = preg_replace('/[^\p{L}0-9 \!]/iu', ' ', $itemtitle);
$titles[] = $itemtitle;
}
}
//$html = "";
foreach ($titles as $itemtitle) {
$this->url = "https://www.googleapis.com/youtube/v3/search?key={$this->config["key"]}&part=$part&order=date&maxResults=4&q=".urlencode($itemtitle)."&videoEmbeddable=true&videoSyndicated=true&type=video";
$data = $this->http(TRUE);
$html = "";
foreach ($data->items as $yt) {
$html .= "РЕЗУЛЬТАТ РАБОТЫ ФУНКЦИИ {$yt->id->videoId}{$yt->snippet->title}";
}
}
if(!empty($html)){
$html = 'шапка блока'.$html.'футер блока';
}
return $html;
}
У вас проблема в бесполезном цикле:
foreach ($wares as $item) {
$itemtitle = $item->title;
$itemtitle = preg_replace('/[^\p{L}0-9 \!]/iu', ' ', $itemtitle);
}
Обрабатывается только последний title
.
Нужно весь код по обработке этого title
добавить внутрь цикла, либо собрать их в массив и потом итерировать.
Например, так:
$titles = [];
foreach ($wares as $item) {
$itemtitle = $item->title;
$itemtitle = preg_replace('/[^\p{L}0-9 \!]/iu', ' ', $itemtitle);
$titles[] = $itemtitle;
}
И ниже итерируете заголовки и строите нужные блоки:
$html = "";
foreach ($titles as $itemtitle) {
$this->url = "https://www.googleapis.com/youtube/v3/search?key={$this->config["key"]}&part=$part&order=date&maxResults=4&q=".urlencode($itemtitle)."&videoEmbeddable=true&videoSyndicated=true&type=video";
$html .= "...";
// ...
}
Думаю очевидно, что в этом конкретном случае можно не собирать массив, а генерировать блоки прямо в первом цикле.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите, пожалуйста, как сделать, чтобы правильно заносились данные, а то 5 раз повторяетсяНужно, чтобы при пополнении от определенной...
Друзья всем привет!!! помогите разобраться раз и навсегда с этой записью, до сих пор сильно путаюсь, благодарю вас заранее