Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Грабер НОВОСТЕЙ. Нужна ПОМОЩЬ!

00 голосов
1
Добрый День уважаемые коллеги!

У меня стоит задача сделать что-то на подобии грабера для новостей!
У нас в 4 сайта, все сайты с одной базой!Нужно сделать чтобы новости брались из всех инфоблоков по типу news
и выводились в блок 5 новостями начиная с самой последней по дате создания.
Задумка такая, что Java-скрипт должен вызвать PHP скрипт, в котором параметром GET будут передаваться данные.
Вот есть скрипт, который делает, что-то похожее, но как сделать тоже только с новостями :( ума не приложу!
Привожу скрипт:
Код
<?
/*
Параметры:
referer1 - название csv-файла без расширения. Если файл не найден, то в качестве источника берется файл default.csv
count - кол-во выводимых баннеров
isset(test) - вывод всех записей из csv-файла
isset(php) - вывод html-кода
!isset(php) - вывод java-script-кода
*/
$site = "http://www.site.ru";
$suffix = "?".$_SERVER['QUERY_STRING'];

function js_write($text)
{
   $s = "";
   if (!isset($_GET['php']))
      $s = "document.write('";
   $s .= $text;
   if (!isset($_GET['php']))
      $s .= "');";
   return $s;
}

function gen_banner($data)
{
   GLOBAL $site, $suffix;
   
   //Если указан относительный путь, то подставляем $site
   if(strpos($data[1], 'http') === false)
      $data[1] = $site.$data[1];
   if(strpos($data[3], 'http') === false)
      $data[3] = $site.$data[3];
      
   $img_attr = '';
   if(isset($_GET["w"]))
      $img_attr .= ' width="' . $_GET["w"] . '" ';

   if(isset($_GET["h"]))
      $img_attr .= ' height="' . $_GET["h"] . '" ';

   $a_attr = ' ';
   if(isset($_GET["t"]))
      $a_attr .= ' target="' . $_GET["t"] . '" ';

   $alt_attr = '';
   $title_attr = '';
   if(!isset($_GET["noalts"]))
   {
      $alt_attr = ' title = "Посмотреть ' . $data[2] . '" ';
      $title_attr = ' alt = "' . $data[2] . '" ';
   }      
      
   return js_write('<a href="' . $data[1] . $suffix . '"' . $title_attr . $a_attr . '><img src="' . $data[3] . '" ' . $alt_attr . 'border="0"' . $img_attr . '></a>') . "\n";
}

$count = 1;
if(isset($_GET["count"]))
   $count = $_GET["count"];

$dir = getcwd()."/banner/"; // текущая директория

if(isset($_GET["referer1"]))
   $csv_file = $_GET["referer1"].".csv";
else
   $csv_file = "default.csv";
   
if (!file_exists($dir.$csv_file))
   $csv_file = "default.csv";
if (!file_exists($dir.$csv_file))
{
   echo "Файл не существует: ".$dir.$csv_file;
   return 0;
}
   
$csv_file_full = $dir.$csv_file;
$fp = file($csv_file_full);
$item_no = rand(2, count($fp)) - 1;

$row = 0;
$step = 0;
$handle = fopen($csv_file_full, "r");
//echo "<pre>";
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
{
   $row++;
    
   if (isset($_GET["test"])) // вывод всех строк
   {
      if ($row > 1)
         echo gen_banner($data).js_write("<br />")."\n";
      continue;
   }
      
   // Доправить кол-во выводимых баннеров для get-параметра count
   if(($row > $item_no) || (count($fp) - $count <= $step))
   {
      echo gen_banner($data);
      $step++;
      if($step < $count)
         echo js_write("<br />")."\n";
   }
   if($step >= $count)
      break;   
}
//echo "</pre>";
fclose($handle);
   
?>

А вот это java ссылка которая вызывает этот скрипт:
Код
<script charset="utf-8" type="text/javascript" src="http://www.site.ru/good.php?referer1=uchmet&referer2=good&referer3=10aug2011&partner=2" ></script>

Подскажите как лучше сделать?
Вот моя наработка, но не уверен, что тут правильно:
Код
$site = "http://www.uchmag.ru";
$suffix = "?".$_SERVER['QUERY_STRING'];

function js_write($text)
{
   $s = "";
   if (!isset($_GET['php']))
      $s = "document.write('";
   $s .= $text;
   if (!isset($_GET['php']))
      $s .= "');";
   return $s;
}

   $arResult = array(
      "NEWS" => array(),
      "SITE" => SITE_ID,
      "CNT" => Array("nPageSize"=>5),
   );

   if(CModule::IncludeModule("iblock"))
   {
      GLOBAL $site, $suffix;
      
      if(strpos($data[1], 'http') === false)
      $data[1] = $site.$data[1];
      if(strpos($data[3], 'http') === false)
      $data[3] = $site.$data[3];
      
      $arFilter = Array(
         "SITE_ID"=>$arResult["SITE"],
         "IBLOCK_TYPE"=>"news",
         "ACTIVE"=>"Y",
         "ACTIVE_DATE"=>"Y",
         ">DATE_ACTIVE_FROM"=>date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,8,22,2011)),
      );
         $res = CIBlo
спросил 30 Сен, 13 от Chemikals (840 баллов)

1 Ответ

00 голосов
Никто не поможет?
ответил 11 Окт, 13 от Chemikals (840 баллов)

Похожие вопросы

0 голосов
0 ответов
спросил 04 Апр, 14 от Xepo6ouTc (260 баллов)
0 голосов
3 ответов
спросил 18 Март, 14 от Marino (100 баллов)
0 голосов
3 ответов
спросил 04 Март, 14 от Vonki (100 баллов)
0 голосов
3 ответов
спросил 26 Фев, 14 от Waicon (280 баллов)
0 голосов
4 ответов
спросил 29 Дек, 13 от WETERa (800 баллов)