Лучшая практика кеширования внешних xmlfeeds - PullRequest
1 голос
/ 09 февраля 2012

У меня есть несколько (24) внешних xmlfeeds, показывающих продукты на моей главной странице.См. Этот стекопоток вопрос для получения подробной информации о каналах.Каждый канал отображает один продукт, но каждый раз, когда кто-то посещает мой сайт, его загружают.Фиды обновляются один раз в день.

Как лучше всего кэшировать эти фиды?Должен ли я сделать что-то с MySQL или сохранить локально файлы XML.Я не уверен, с чего начать.Я пытался JG_Cache , но без удачи.

Это цикл, который я использую:

<?php
    // get xml file contents
    $xmlurl = get_post_meta( get_the_ID( ), 'plus_xmlfeed', true );
    if ( !empty( $xmlurl ) ){
    $xml = simplexml_load_file($xmlurl);
    }
    $xml->product->name = substr($xml->product->name, 0, 30).'...';
    $desc = substr($xml->product->name, 0, 50).'';
?>

    <li class="span3">
      <div class="thumbnail">
      <a href="<?php echo $xml->product->productURL ;?>">
          <center><img src="<?php echo get_template_directory_uri(); ?>/img/logos/<?php echo get_post_meta(get_the_ID( ), 'plus_logos', true); ?>.gif"/></center>
          <center><img class="mainimg" alt="" src="<?php echo $xml->product->imageURL ;?>"/></center>
        </a>
        <div class="caption">
          <h5><a href="<?php echo $xml->product->productURL ;?>"><?php echo $xml->product->name; ?></a></h5>
          <div class="maindesc half clearfix"><div class="prijs">&euro; <?php echo $xml->product->price ;?></div><strike style="color: rgb(248, 148, 6);">
            <?php
            foreach ($xml->product->additional->field as $field) {
                               switch((string) $field['name']) {
                                   case 'price_advice':
                                      echo '&euro; ' .$field. '';
                                      break;
                                   case 'fromPrice':
                                      echo '&euro; ' .$field. '';
                                      break;
                                   case 'oldPrice':
                                      echo '&euro; ' .$field. '';
                                      break;
                                   case 'from_price':
                                      echo '&euro; ' .$field. '';
                                      break;
                                   case 'adviesprijs':
                                      echo '&euro; ' .$field. '';
                                      break;
                                   case 'advice_price':
                                      echo '&euro; ' .$field. '';
                                      break;
                                   case 'Fromprice':
                                      echo '&euro; ' .$field. '';
                                      break;
                                   case 'recommendedPrice':
                                      echo '&euro; ' .$field. '';
                                      break;
                                    }
                                }
            ?>
            </strike>
          <p style="color: rgb(153, 153, 153);"><?php echo $desc; ?></p></div>
          <div class="btn-group bot"><div class="pull-right"> </div><a class="btn btn-primary" href="<?php echo $xml->product->productURL ;?>">Kopen</a> <a class="btn" href="#<?php echo 'modal_'.get_the_ID();?>">Info</a></div>
        </div>
      </div>

    </li>
<?php /*end loop*/ ?>

1 Ответ

0 голосов
/ 09 февраля 2012

Чтобы ответить на ваш ближайший вопрос, рассмотрите следующий псевдокод:

  1. Проверить наличие локального файла с содержимым xml. Что-то вроде /home/db/tempfiles/feed_name_current_date.xml

  2. Если не удается найти соответствующий локальный локальный файл, используя конструкцию из шага 1, загрузите XML как вы делаете сейчас

  3. После загрузки xml из URL-адреса сохраните содержимое, используя конструкцию пространства имен с feed_name и current_date , поэтому при создании нового запроса шаг 1 вернет локальный файл

Мне любопытно, что если вы не хотите хранить данные в своей локальной системе, если это xml-лента? Как вы отслеживаете покупки и т. Д.

...