Как вывести на моем сайте div с чужого сайта и сделать в нем замену

zek24

Мой дом здесь!
Команда форума
Модератор
Регистрация
14 Ноя 2009
Сообщения
811
Реакции
310
  • Автор темы
  • Модер.
  • #1
Привет
есть site_donor.com и мой сайт mysite.com
на site_donor есть блок с фильтром div#filter

задача1: вывести этот блок на моем сайт (ВП)
нашел такое решение, но хз почему не работает
Код:
$url = file_get_contents(http://bla-bla.bla);
preg_match("/<div.*?>(.*?)<\/div>/is", $url, $resul);
print_r($resul);

В <div.*?> пропиши основное например ID дива. Выведи всё это print_r($resul); и посмотришь результат

задача2: в результатах фильтрации подменить ссылки на товары сайта донора на ссылки в моем сайте.

то есть фильтр выдал site_donor.com/tovar1
нужно заменить на mysite.com/tovar_1

Замену сделаю, скорее всего, вручную.
Но вопрос как, в принципе.

Буду рад помощи
 
Результаты фильтрации? Речь о получении, опять же, данных с сайта-донора? Что-то вопрос подозрительно простой :shifty:
На Вашем месте, я бы написал функцию для получения уже отфильтрованных данных
PHP:
function filter_result($url)
{
    // если сайт на https, то вместо file_get_contents лучше использовать curl
    $raw = file_get_contents($url);
    // массив для сохранения результата поиска по регулярному выражению
    $match = array();
    // результат преобразований
    $result = '';
    // тут я спешу огорчить: с 99.99% вероятностью, текущий вариант регулярки не подойдёт, т.к. внутри
    // блока <div id="filter"> будут другие <div>'ы, в том числе и закрывающие, потому часть содержимого не удастся "сматчить"
    // Вам будет нужно найти такую подстроку на сайте-доноре, чтобы полностью "поймать" содержимое блока
    // т.е. какую-то уникальную часть после самого блока с фильтром, потому Ваше решение не сработало до конца
    if (preg_match('/<div[^>]+id="filter"[^>]*?>(.*?)<\/div>/ui', $raw, $match) !== 1)
    {
        // возврат пустой строки, если не найдено совпадение с регулярным выражением
        return '';
    }
    // в result кладём решение п.1. (сейчас внутри только содержимое блока, но если нужно получать блок целиком, а не только содержимое, то нужно опять-же допиливать регулярку)
    $result = $match[1];
    // для решения п.2. обычная замена (точки и тире экранируются в регулярке)
    $result = preg_replace('/site\-donor\.ru/i', 'site.ru', $result);

    return $result;
}
Если приведёте пример страницы, откуда берутся данные, можно было бы более точно определить регулярное выражение.
 
Ставишь к примеру через composer (почти во всех нормальных редакторах есть) PHPHtmlParser. И пишешь что-нибудь похожее. Почитай документацию.
Код:
require '../vendor/autoload.php';

use PHPHtmlParser\Dom;

$dom = new Dom;

$dom->load('https://yandex.ru/');
$a = $dom->find('.div_class');
$a->setAttribute('url', 'newurl');
 
Назад
Сверху