LastoShopGold: собственные документы.

Создание своих документов в LastoShopGold:

Скрипт магазина оборудован несложной CMS, позволяющей выводить в шаблоне дизайна Шопа как статичные, так и динамичные (синтезированные с помощью PHP) документы, интегрировав их с функционалом магазина. Кстати говоря, большая часть функционала Шопа именно так и реализована- присмотритесь к содержимому папки ./data/content/

Проще всего понять, как это работает, создав файлик test.php в указанной выше папке, и поместив в него минимальный код:

<?php
   
   $title
="Тайтл этого документа";
   
$echo=<<<content

      <p class='bt bb tt'>$title</p>
      <p>Тут контент.</p>

content;

?>

Если код вызывает ошибку при использовании на Вашем сайте, кликните, чтобы узнать причину.

Теперь, обратившись к URL-у документа cms_test.html относительно морды Шопа (обратите внимание на расширение документа в URL-е и приставочку cms_ в имени виртуального файла), Вы узрите нормальную страничку с оговоренным тайтлом и контентом.

Далее совершенно понятно, что, выкинув в этом примере контейнер с HTML кодом, и разместив на его месте любой РНР скрипт, осуществляющий вывод не на экран операторами echo или print, а в переменную $echo, Вы получите поддержку динамичных страниц.

Причём, обратите внимание, этому Вашему скрипту отнюдь не запрещено слать любые РНР хеадеры (кодировки, управления кэшированием, кук, сессий...)- CMS Шопа сконструирована так, чтобы РНР приложение на его основе было полностью функционально в любых его причудах.

К примеру, нетрудно написать приложение, оценивающее популярность лотов по последним N продажам:

<?php
   
   $n
=100# Задаваемая цифра.
   
$tmp=array_reverse(rdb($lotsdata,""));
   
$tmp=array_slice($tmp,0,min($n,count($tmp)));
   
$n=count($tmp);

   
$title="Последние $n продаж:";
   
$echo="<p class=\"bt bb tt\">Популярность на примере последних $n продаж:</p><br>";

   
$arr=$null;
   foreach (
$tmp as $v) {
      
$arr[$v[6]]=isset($arr[$v[6]]) ? $arr[$v[6]]+11;
   }
   
arsort($arr);
   
   list(
$local,$a,$b,$c)=get_dbs(gethost($all_shops[0][0]));

   
$price=$null;
   foreach (
rdb($local,"") as $v) {
      
$price[getlot($v[1])]=$v;
   }

   
$out=$null;
   foreach (
$arr as $k => $v) {
      if (isset(
$price[$k])) $out[]=
         
$arr[$k]." <a href=\"$k.html\" target=\"_blank\" >".$price[$k][2]." ".$price[$k][3]."</a>";
   }
   
$echo.=implode($oslen."<br>",$out);

?>

Структура URLов для документов CMS:

То, что документ с произвольным именем файла и расширением .php, уложенный в папку ./data/content/, станет виден в браузере с припиской cms_ спереди и расширением .html, причём на уровне корня Шопа, Вы уже поняли.

Однако есть ещё и возможность генерировать только одним скриптом кучи страниц, различающихся контентом - просто предусмотрите в своём скрипте анализ переменной $_GET['from'] - в эту переменную попадёт то, что будет написано на месте выделенного красным:

test-xxx.html

При этом, вне зависимости от того, что именно написано в URL-е на месте выделенного красным, исполняться будет скрипт ./data/content/test.php

Само собой, есть и ограничение - на месте трёх красных иксов в URL-е документа может фигурировать алфавитно-цифровая запись, причём на латинице. Всякие знаки препинания и спецсимволы не разрешены.

Оформление документов на базе CMS Шопа:

Обратите внимание, что всё, что Вы скормили в вышеприведённых примерах переменной $echo, уходит в стандартный дизайн Шопа. Однако вовсе не факт, что Вы обязаны поступать именно так.

К примеру, в любом месте кода можно написать:

   die($echo);

Это остановит исполнение скрипта, и отдаст на экран результаты трудов Вашего кода без всякого оборачивания в какой бы то ни было дизайн - можете подцеплять свои шаблончики.

Если шаблоном дизайна Шопа предусмотрена вариация внешнего вида документов, то можно применить к этому документу один из имеющихся вариантов дизайна, скажем, вот так:

   finita('nodesign','');

- для данного документа отменяется панелька навигации.

Это удобно, когда Вы ссылаетесь на какой-то свой документ с описания лота, но не хотите, чтобы Ваши партнёры, прицепившие Ваш прайс к своим Голдам или партнёрским магазинам, сочли такие объяснялки попыткой увода у них посетителей. Ибо, когда Вы открываете документ без всяких ссылок с него на свой сайт, никаких таких подозрений не возникает.

Понимая этот тонкий момент, Вы даже можете в рамках своего сайта открывать документ в стандартном дизайне (с панелькой навигации и всеми ссылками в ней), а при переходе на тот же самый документ, но не со своего сайта, панельку прятать:    $from=!empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER']: '';
   if (
$from==''finita('cms','');
   
finita('nodesign','<p>Вернуться на сайт: <a href="'.$from.'" >'.$from.'</a></p>');

Чтобы у партёров и вовсе не оставалось никаких сомнений в Вашем трепетном отношении к их правам, тут даже втыкается в конец странички ссылка на то место сайта партнёра, откуда совершился клик, и был вызван Ваш документ.

Есть и другая, более сложная реализация заботы об интересах партнёров:

   if (is_refer()) {
      
$echo=preg_replace('~<a([^>]+)>([^<]+)<\/a>~i','\2',$echo);
      
finita('nodesign','');
   }

- в данном случае при открытии документа с внешнего сайта не только пропадает панелька навигации, но и все ссылки с текста документа (если они там есть) перестают быть ссылками.