Documentation index
- ReadMe
- Things To Know
-
- New Style Rotation
Это один из важных пунктов, который надо обязательно понять, потому что далее он много где используется. Как уже было сказано в How it works все страницы в новой ротации формируются фактически одним скриптом и получается разный результат в зависимости от входных паратмеров. Грубо говоря /scj/tube/index.php?group_name=phones выведет тумбы группы phones, а /scj/tube/index.php?group_name=cars - выведет тумбы группы cars. Хотя на сайте это будет выглядеть как /category/phones/ и /category/cars/ - красивые урлы получаются благодаря реврайтам (что такое реврайты mod rewrite)
В данном примере /scj/tube/index.php?group_name=phones конкретно group_name=phones это GET параметры.
Основная суть которую надо понять в этом пункте: скрипту /scj/tube/index.php можно передавать параметры разными способами.
Вариант 1
Прямой когда вы так и пишете /scj/tube/index.php?group_name=phones . Тут единственный нюанс, который как мне кажется знают все кто работает в интернете больше 3х дней, это как перечислять парамтеры. Конкретно после имени файла ( в данном случае) идет “?” (знак вопроса), а параметры между собой разделяются & (амперсант)
Вариант 2 - Через реврайты
Например мы хотим вывести группу phones опредленныv темплейтом. В варианте 1 это выглядело бы как /scj/tube/index.php?group_name=phones&force_template=super_template что не сильно красиво. Поэтому мы пишем реврайт
RewriteRule ^super_phones\.html$ /scj/tube/index.php?group_name=phones&force_template=super_template
и урл будет красивым - http://yourdomain/super_phones.html.
Вариант 3 - через файл
Вариант с реврайтами хороший, но в нем есть 2 проблемы: бывают сайт без апача, те чисто на nginx например, который .htaccess файлы не читает и соответственно прописанные там реврайты не работают. И если реврайтов очень много это начинает грузить проц.
Кроме того в реврайтах тяжелее делать гибкие условия, и потому есть вариант 3.
Та же задача: красивый линк для /scj/tube/index.php?group_name=phones&force_template=super_template. Создаем файл super_phone.php с содержанием
<?php $_GET['group_name'] = 'phones'; $_GET['force_template'] = 'super_template'; include('./scj/tube/index.php');
и получаем красивый урл http://yourdomain/super_phones.php
Но плюс этого варианта еще и в том, что параметры можно гибко менять прямо на пхп под какие то условия, котоыре не предусмотрены в скрипте , например
<?php $_GET['group_name'] = 'phones'; // тут меняем темпелйт в зависимости от рефера if ($_SERVER['HTTP_REFERER'] == 'гугл') { $_GET['force_template'] = 'super_template_for_google'; } else { $_GET['force_template'] = 'super_template_for_traders'; } include('./scj/tube/index.php');
<?php $_GET['order'] = 'date'; include('./scj/tube/index.php');
Для начала как траффик попадает от трейдера к вам:
У трейдера многонишевый сайт:
У трейдера однонишевый сайт
Все. Больше ничего для простых вариантов делать не надо.
Если по каким-то неизвестным причинам авторедирект вам не походит и вы хотите old-style с настраиванием каждого трейдера отдельно то варианты следующие:
RewriteRule ^niche\.php$ /?niche_name=niche
и просите трейдера слать http://yourdomain/niche.php - вариант 2 это создать файлик например niche.php вида
<?php $_GET['group_id'] = 21; // это ид ниши ротации include('./scj/tube/index.php');
и далее либо трейдер сразу шлет на http://yourdomain/niche.php либо заходим в редактирование трейдера и выставляем ему niche.php как персональную страницу.
Если вы используете какой-то из сложных вариантов - опишите плз почему. Надо добавить пример зачем это может быть надо.
Теперь раздача по группам на ауте.
Вариант 1
RewriteRule ^gal/(.*)/(.*)/index.html?(.*)$ /scj/cgi/out.php?link=images/%{QUERY_STRING}&group=$1&url=content&slug=$3
a href='/gal/<!--GROUP_NAME-->/<!--GALLERY_SLUG-->/index.html?<!--THUMB_LINK-->'
Как не сложно заметить тут через реврайт передается имя группы.
Вариант 2
В апдейте 48 появилась фича Trade by groups
У нас классический мультинишевый сидж, мы хотим трейдить по группам. Для этого надо добавить &group=… в урле, однако для сидже туба с реврайтами это не так удобно и красиво как хотелось бы. Те если по дефолту линки выглядят как /gallery/cool_gal/index.html, то для трейда по группам нам надо сделать что-то вроде /gallery/current_group/cool_gal/index.html + немного поменять реврайт, что бы ауту был передан параметр группы. Для кого это сложно есть другой вариант.
Если вы используете дефолтные реврайты значит у вас страницы категорий имеют урл типа /category/123/asian/ или просто /category/asian/, значит если человек кликает в этой категории, то на ауте мы можем определить в какой категории был сделан клик по реферу, и в зависимости от категории слать на разные группы трейдеров.
Итого, дабы заюзать эту функцию надо:
Вариант 3
Обычно на мультинишевом сидже довольно много ниш, больше чем ниш в которых хотелось бы распределить трейдеров, например 500 ниш в ротации, а трейдеров хотелось бы распределить только по 15 группам.
RewriteRule ^gal/(.*)/(.*)/index.html?(.*)$ /scj/cgi/out.php?link=images/%{QUERY_STRING}&group=$1&url=content&slug=$2
a href='/gal/<!--GROUP_CUSTOM_VAR1-->/<!--GALLERY_SLUG-->/index.html?<!--THUMB_LINK-->'
Ролинг тумб - с одной гали мы берем например 5 тумб в ротацию, дабы найти лучшую. Можно по наведении мышки на тумбу устроить ролинг тумб с галеры. Такой подход развит в тубах, в пиксовых сайтах такого не было еще ( Вот пример для пиксовой галеры, надо навести выш на любую тумбу и подождать долю секунды) и конечно же такой же вариант для мувисных галер.
Сделать очень просто:
<script src='/scj/includes/js/jquery.js'></script> <script> $(document).ready(function() { $("img[id^=rot]").bind('mouseenter', function() { $(this).attr('rotating', 1); StartSlide($(this).attr('id')); }).mouseleave(function() { $(this).attr('rotating', 0); if ($(this).attr('original_src')) $(this).attr('src', $(this).attr('original_src')); }); }); function StartSlide(id) { if (!$('#' + id).attr('rotating') || $('#' + id).attr('rotating') == 0) return false; if (!$('#' + id).attr('original_src')) $('#' + id).attr('original_src', $('#' + id).attr('src')); var images = $('#' + id).attr('original_src') + ',' + $('#' + id).attr('rel'); images = images.split(','); var cur = $('#' + id).attr('current_img'); cur = parseInt(cur); cur = (!cur || cur == 0) ? 1 : (cur+1); cur = (!images[cur]) ? 0 : cur; $('#' + id).attr('current_img', cur); var preload = new Image(); if (cur == 0) { preload.src = $('#' + id).attr('original_src'); } else { preload.src = images[cur]; } if ($('#' + id).attr('rotating')) setTimeout("ChangeSRC('"+id+"', '"+preload.src+"')", 700); } function ChangeSRC(id, src) { if (!$('#' + id).attr('rotating') || $('#' + id).attr('rotating') == 0) return false; $('#' + id).attr('src', src); StartSlide(id); } </script>
<a href="/gallery/<!--SAFE_DESC-->/<!--GALLERY_ID-->/index.html?<!--THUMB_LINK-->" title="<!--ALT-->"> <img id='rot<!--GALLERY_ID-->' src="<!--THUMB_URL-->" class="t_img" alt="" rel="<!--ALL_THUMBS-->" /> </a>
тут 2 момент,на которых и работает роллинг:
id='rot<!--GALLERY_ID-->' - скрипт делает роллинг только тех тумб, у которых ИД начинается с rot rel="<!--ALL_THUMBS-->" - тут скрипт перечисляет все доступные тумбы для этой галеры
В mysql есть 2 варианта выборки из базы: когда считается общее кол-во результатов по запросу и когда нет. Второй вариант быстрее. Соответственно, когда нет макроса <pagination скрипт думает, что точные числа не нужны, например используется prev\next, и делает запрос 2м вариантом.
Поэтому если надо своя навигация и точное число TOTAL_ITEMS - надо вставить что-то вроде
<!-- <pagination> . </pagination> -->
те навигация есть, но в html комменте, при этом скрипт посчитает <!–TOTAL_ITEMS–> и вы сможете дальше использовать это число в своем коде.
Вы можете сделать любую на свой вкус. Например
$total_pages = ceil(<!--TOTAL_ITEMS-->/100); for ($i = 1; $i <= $total_pages; $i++) { echo "<a href='/?page={$i}'>{$i}</a>"; }
где 100 - это кол-во тумб у вас на странице (его вы занете, тк сами создаете теплейт). Это простой пример, конечно вы можете разнообразить так как вам надо для конкртеной страницы.
Вариант 2
В большинстве случаев серферам 25я страница совершенно не нужна и люди туда в большинстве случаев не ходят, поэтому имеет смысл ограничить их например 5 иил 10ю страницами и просто вписать их в темплейт как есть
<ul class="pages"> <li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/" title="1">1</a></li> <li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/2/" title="2">2</a></li> <li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/3/" title="3">3</a></li> </ul> Для красоты можно выделять текущую страницу например <li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/" title="1"> 1 вот тут </a></li> добавляем код и получается <li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/" title="1"> <? if ($_GET['page'] == 1) ? '<b>1</b>' : '1' ?> </a></li> и тоже самое для остальных страниц.
Варианта 2 Первый
1. Создаем кастом темпелйт, например cat_template в котором вывод самих категорий например
<category order=clicks num=1-20> <a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/?<!--THUMB_LINK-->" title="<!--CATEGORY_NAME-->"><img src="<!--THUMB_URL-->" class="t_img" alt="" /></a> </category>
2. эта страница будет видна по ссылке /scj/tube/?force_template=cat_template
3. что бы получить красивую ссылку добавим реврайт
RewriteRule ^categories$ /?force_template=cat_template
и страница будет открываться по ссылке domain.com/categories
Вариант 2
1. Создаем кастом темпелйт, например cat_template в котором вывод самих категорий например
<category order=clicks num=1-20> <a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/?<!--THUMB_LINK-->" title="<!--CATEGORY_NAME-->"><img src="<!--THUMB_URL-->" class="t_img" alt="" /></a> </category>
2. созадем файл categories.php на корне домена в котором
<?php $_GET['force_template'] = 'cat_template'; include('./scj/tube/index.php');
3. страница доступна по ссылке domain.com/categories.php
По дефолту сайтмап у вас есть в scj/sitemap.php но если вдруг почему то его нет, то
1. Создайте темплейт sitemap (начиная с апдейта 46 он есть в дефолтных темплейтах) с содержимым вроде
<!--default_1-1000-->
и сабтемплейтом в соответствии с форматом сайтмап.
2. на корне домена создайте файл sitemap.php
<?php define('CACHE_TIME', 86400); $_GET['force_template'] = 'sitemap'; $_GET['skip_cell_settings'] = true; // skips cell K calculation - saves a bit of processor time // $_GET['custom_galleries'] = true; // uncomment this line if you need only custom galleries in site map header('Content-Type: application/xml'); include('./scj/tube/index.php');
Обратите внимание, что если вы юзаете описания в которых есть спецсимволы, например & (амперсант) то в темпелйте надо использовать CDATA (если не в курсе что это такое то имеет смысл открыть google).
Учитывая что этот пункт доки мог быть написан довольно давно относительно момента когда вы его прочтете, имеет смысл еще раз проверить доки гугла относительно правил для сайтмапа. Кроме того, в правила гугла написано, что размер сайтмапа должен быть не более опредленного, поэтмоу если у вас больше 1-2-3к галер то вам в любом случае надо разделить на страницы по ?page=1 ?page=2 и тп. (см setting_get_paramaters
1. Создайте темплейт rss (начиная с апдейта 47 он есть в дефолтных темплейтах) с содержимым вроде
<thumb num=1-100> темпелйте для rss </thumb>
и сабтемплейтом в соответствии с форматом rss.
2. на корне домена создайте файл rss.php
<?php define('CACHE_TIME', 86400); $_GET['force_template'] = 'rss'; $_GET['skip_cell_settings'] = true; // skips cell K calculation - saves a bit of processor time include('./scj/tube/index.php');
Например вы инклудите темплейт header во всех темпелйтах, поэтому если вы хотите разные титлы для разных страниц есть следующие варианты:
Вариант в зависимости от темплейта
<?php if ('<!--TEMPLATE_NAME-->' == 'index') { ?> This is index <? } elseif ('<!--TEMPLATE_NAME-->' == 'content_list') { ?> This is category <? } elseif ('<!--TEMPLATE_NAME-->' == 'content_search') { ?> this is search <? } else { ?> some other page <? } ?>
В зависимости от переданных в урле переменных
<html> <?php if ($_GET['gallery_id']) {?> <title>This is custom gallery , display gallery description here for example <!--DESCRIPTION--></title> <?php } elseif ($_GET['group_id']) { ?> <title>This is category page, use here <!--GROUP_NAME--></title> <?php } else { ?> <title>This is index, any other desc here</title> <?php } ?>
Например, нам надо вывести на какой-то странице только мувики. Для этого в параметры надо добавить content_type=movie
http://domain.com/scj/tube/?group_id=5 - весь контент из группы 5 http://domain.com/scj/tube/?group_id=5&content_type=movie - только мувики из группы 5 Так же можно использовать image и flash
Все это так же работает через файл
<?php $_GET['group_id'] = 5; $_GET['content_type'] = 'movie'; include('./scj/tube/index.php');
Прежде чем делать отдельный темплейт - подумайте, возможно вам надо не отдельный темплейт, а просто воспользоваться custom vars для категорий и таким образом решить этот вопрос. Однако, если вы уверены, что надо совершенно другая страница то сделать это можно следующим образом:
if ($_GET['group_id'] == '1' or $_GET['group_name'] == 'group_name') $_GET['force_template'] = 'cat_new'; где 1 и group_name это соотв ИД и имя нужной вам категории
После <? добавляем if ($_SERVER['REQUEST_URI'] == '/') { $_GET['force_template'] = 'blog_index'; } elseif (isset($_GET['group_id'])) { $_GET['force_template'] = 'blog_content_list'; }
В версии 46 добавлена новая опция - скимминг на галерах.
Rotation - CMS - Tube Settings можно поставить custom gallery skimming например в виде
100%,70%trader.com,70%sponsor,50%sponsor_join,100 первый клик на контент (100 и 100% одно и тоже, можно пистаь как удобнее) второй: 70% контент остальные соотв. 30% - /scj/cgi/out.php?member=trader.com, 3й : 70% контенкт 30% спонсор ( на урл который прописан у спона в site url) 4й : 50% контента 50% спонсор ( урл - join url), 5 и далее - 100% контент
Обратите внимание, что работает это только если вы линкуете не прямо на контента, а через скрипт, например
<a href='/gallery/<!--SAFE_DESC-->/<!--GALLERY_MD5-->/1.html'><img src='<!--IMG_1_THUMB-->'></a>
Многие продают траф на биржах. При покупке биржа учитывает только домен и для мультмнишевых доменов цена трафа обычно ниже, чем для нишевых, однако есть возможность слать траф с указание ниши и в этом случае биржа может дать бОльший бид.
Например, обычно все продают траф по линке http://brocker.com/in.cgi?your_id В этом случае, если у вас мультиниш, ваш траф считается как мультиниш траф. Но биржа предоставляет возможность слать траф как http://brocker.com/in.cgi?your_id&niche=test , где test это ниша. Такой траф уже считается как нишевый и может стоить больше.
Для этого мы добавляем в урл продажи параметр {GROUP}те урл получается вида http://brocker.com/?id=your_id&niche={GROUP} (например для холдера http://www.trafficholder.com/in/in.php?вашид-{GROUP} ). Однако вопрос в том, что ниши japanese у брокера нет? наиболее близкая например tube_asian. Для этого в Rotation - CMS - Tube settings есть поле Niche traffic sell в котором нам и надо ввести соответствия наших ниш и ниш у брокера, например,
tube_asian=Japanese,Asian где tube_asian это ниша у брокера , а Japanese,Asian это наши ниши на сайте разделенные запятой.
Как изветсно в темпелйтах можно использовать пхп. И конечно его можно использовать в навигации дабы вывести например какую то категорию другим цветом, или как то выделить, или не выводить категорию и тп
дефолтно это выглядит примерно так <navigation> <a href="/category/<!--CATEGORY_NAME-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM--></a> </navigation> допустим нам надо категорию girls выделить цветом <navigation> <? if ('<!--CATEGORY_NAME-->' == 'girls') { ?> <a href="/category/<!--CATEGORY_NAME-->/" title="<!--PAGE_NUM-->"><font color='pink'><!--PAGE_NUM--></font></a> <? } else { ?> <a href="/category/<!--CATEGORY_NAME-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM--></a> <? } ?> </navigation> допустим нам надо пропустить категорию girls в этом списке <navigation> <? if ('<!--CATEGORY_NAME-->' != 'girls') { ?> <a href="/category/<!--CATEGORY_NAME-->/" title="<!--PAGE_NUM-->"><font color='pink'><!--PAGE_NUM--></font></a> <? } ?> </navigation>
Для дизайна иногда удобно иметь 2 размера тумб ротации, например показывать на индексе большие тумбы, а на страницах категорий - помньше.
Для того что бы скрипт создавал большие картинки для индекса в Rotation - Settings - Crop Profile создаем кроппрофайл с бОльшими размерами, а при грабе в поле Extra Thumb указываем этот профайл. При этом скрипт создаст 2 тумбы: условно одна тумба /scj/thumbs/123/456.jpg и вторая из того же оригинала но с использоватением другого кроп-профайла - /scj/thumbs/123/456.jpg.extra.jpg
Использовать это в темплейте можно так: обычно выводим тумбу как
<img src='<!--THUMB_URL-->'>
Если вы делали экстра тумбу, то вывести ее можно как
<img src='<!--EXTRA_THUMB_URL-->'>
<?php $_GET['force_template'] = 'trd_tpl'; include('./scj/tube/index.php');
и пропишите ПУТЬ (!НЕ УРЛ!!!) к этому файлу в редактировании трейдера.
Актуально только для скрипта версии 1.х
В версии 2.х есть magic rotation parameter, когда в линках не надо ничего
Обычно линки выглядят следующим образом:
/gallery/cool_gallery/index.html?12x34x56
12x34x56 - это параметры ротации, цель - избавиться от этого в урле дабы выглядело это эстетичнее.
Можно сделать следующим образом:
1. В сабе ссылки у вас выглядят примертно так:
<a href="/gallery/<!--GALLERY_SLUG-->/index.html?<!--THUMB_LINK-->"> <img ...> </a> заменяем на <a href="/gallery/<!--GALLERY_SLUG-->/index.html" rot_id='<!--THUMB_LINK-->'> <img ...> </a>
как ни сложно заметить мы вынести <!–THUMB_LINK–> в параметр rot_id
2. в <head> добавляем
<script type="text/javascript" src="/scj/includes/js/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ $('a[rot_id]').each(function(){ $(this).bind('click', function(){ if ($(this).attr('href').indexOf('?') == -1) $(this).attr('href', $(this).attr('href')+ '?' + $(this).attr('rot_id')); }); }); }); </script>
Тут “не нравится” бывает 2х видов - сам вид /gallery и тп - это меняется в реврайте.
2й вариант - не нравится, что 123x45x678 стоит сразу после урла, он там меняется и тп
Тут варианты:
1. Если не нравится, что это видит серфер - http://smartcj.com/wiki/doku.php?id=ru:new_rotation_hints#%D0%BA%D0%B0%D0%BA_%D1%83%D0%B1%D1%80%D0%B0%D1%82%D1%8C_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80_%D1%80%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D0%B8_%D0%B8%D0%B7_%D0%BB%D0%B8%D0%BD%D0%BA%D0%BE%D0%B2_1x23x456
2. Для СЕ - http://smartcj.com/wiki/doku.php?id=ru:custom_galleries_and_google
3. Для СЕ так же есть другой вариант - сделать линки вида
/gallery/cool/index.html?link=images/123x45x678
и в GWT объявить, что link - это незначащий парамтер и гугл может его игнорировать.
Для этого в .htaccess заменяем места вида
out.php?link=images/%{QUERY_STRING} на out.php?%{QUERY_STRING} В темплейте там же меняем на http://domain/gallery/<!--GALLERY_SLUG-->/index.html?link=images/<!--THUMB_LINK-->
Вариант 2 изменения окончания линков
В реврайтах меняем
RewriteCond %{QUERY_STRING} ^(.+)$ RewriteRule ^gallery/([^/]+)/index.html$ /scj/cgi/out.php?link=images/%{QUERY_STRING}&url=content&slug=$1 [L]
на
RewriteCond %{QUERY_STRING} ^param=(.+)$ RewriteRule ^gallery/([^/]+)/index.html$ /scj/cgi/out.php?link=images/%1&url=content&slug=$1 [L]
как видно тут добавлен param который и можно отключить в GWT
линки соответственно надо делать вида
href="/gallery/<!--GALLERY_SLUG-->/index.html?param=<!--THUMB_LINK-->
Вариант 3 если вы хотите совершенно другой вид
В данный момент таг <!–THUMB_LINK–> выдает условно 12x34x56, например вы хотите что б было &a=12&b=34&c=56 или например &ppp=12.34.56 и тп , одним словом какой-то другой вид.
в сабе делаете $my_var = explode('x', '<!--THUMB_LINK-->'); получаете массив Array ( [0] => 12 [1] => 34 [2] => 56 )
и можете из него формироваль линк как угодно
например вариант с a b с
out.php?url=....&a=<?=$my_var[0]?>&b=<?=$my_var[1]?>&c=<?=$my_var[2]?> а в common.php складывается параметр назад if (isset($_GET['a'])) { $_GET['link'] = 'images/' . $_GET['a'] . 'x' . $_GET['b'] . 'x' . $_GET['c']; }
Таким образом можно сделать пармтеры с любыми именами или точками, одним словом фантазия никак не ограничена.
Обычно навигация (она же пагинация) выглядит примерно так 1 2 3 … 40 41 42.
Если надо вывести все 42 без … надо навигацию заменить примерно на следующее
Было <navigation> <li><a href="/category/<!--CATEGORY_NAME-->/<!--SORT_ORDER-->/<!--PAGE_NUM-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM--></a></li> </navigation> заменим на <!-- закоментили текущую навигацию, не удаляя ее вообще из темплейта <navigation> <li><a href="/category/<!--CATEGORY_NAME-->/<!--SORT_ORDER-->/<!--PAGE_NUM-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM--></a></li> </navigation> --> <?php $thumbs_per_page = 200; $total_pages = ceil(<!--TOTAL_ITEMS-->/$thumbs_per_page); for ($i = 1; $i <= $total_pages; $i++ ) { ?> <li><a href="/category/<!--CATEGORY_NAME-->/<!--SORT_ORDER-->/<?php echo $i?>/" title="<?php echo $i?>"><?php echo $i?></a></li> <?php }?> где $thumbs_per_page = 200; соотв кол-во тумб на старницу в вашем темплейте.
Что бы добавить рейтинг кастом галер надо (на примере content_custom_pic)
Добавляем стили что б звездочки были красивые
<style> div.rating-cancel,div.star-rating{float:left;width:17px;height:15px;text-indent:-999em;cursor:pointer;display:block;background:transparent;overflow:hidden} div.rating-cancel,div.rating-cancel a{background:url(/scj/tube/delete.gif) no-repeat 0 -16px} div.star-rating,div.star-rating a{background:url(/scj/tube/star.gif) no-repeat 0 0px} div.rating-cancel a,div.star-rating a{display:block;width:16px;height:100%;background-position:0 0px;border:0} div.star-rating-on a{background-position:0 -16px!important} div.star-rating-hover a{background-position:0 -32px} /* Read Only CSS */ div.star-rating-readonly a{cursor:default !important} /* Partial Star CSS */ div.star-rating{background:transparent!important;overflow:hidden!important} /* END jQuery.Rating Plugin CSS */ </style>
Добавляем JS скрипт который будет красиво делает mouseover для звездочек
<script src='/scj/includes/js/jquery.js' type="text/javascript"></script> <script src='/scj/includes/js/jquery.rating.pack.js' type="text/javascript" language="javascript"></script> <script> $(function(){ $('.auto-submit-star').rating({ callback: function(value, link){ $('#rating_div').html('Posting...'); $.get('/scj/tube/index.php', { 'gallery_id': '<!--GALLERY_ID-->', 'action': 'rating', 'rating': value }, function(data) { $('#rating_div').html('Thank you!'); } ); } }); }); </script>
Добавляем конкретно сами звездочки
<h4>Rate this movie:</h4> <div id='rating_div'> <input class="auto-submit-star" type="radio" name="rating" value="1"/ <? if(<!--RATING--> > 0) echo 'checked' ?> > <input class="auto-submit-star" type="radio" name="rating" value="2"/ <? if(<!--RATING--> > 1) echo 'checked' ?> > <input class="auto-submit-star" type="radio" name="rating" value="3"/ <? if(<!--RATING--> > 2) echo 'checked' ?> > <input class="auto-submit-star" type="radio" name="rating" value="4"/ <? if(<!--RATING--> > 3) echo 'checked' ?> > <input class="auto-submit-star" type="radio" name="rating" value="5"/ <? if(<!--RATING--> > 4) echo 'checked' ?> > </div>
Все.
PS Вывести рейтинг можно где угодно тагом <!–RATING–> - это будет число из которого можно получить что угодно. простейший пример в сабе
<? if(<!--RATING--> > 0) echo '*' ?> <? if(<!--RATING--> > 1) echo '*' ?> <? if(<!--RATING--> > 2) echo '*' ?> <? if(<!--RATING--> > 3) echo '*' ?> <? if(<!--RATING--> > 4) echo '*' ?>
И прочие 2хвариантные рейтинги. Смысл очень простой: оставляем только 2 пункта из того же рейтинга пунктом выше. Это будут рейтинг 1 и 2. Условно если юзер поставил 1 это значит dislike , если 2 то like. Соответственно если по результатам у нас получилось среднее 1.5 - значит 50\50 ставили лийки. 1.75 - значит 75% like, 25 dislike. Надеюсь смысл ясен.
Техническая реализация:
Добавляем JS скрипт, который будет постить результат голосования
<script src='/scj/includes/js/jquery.js' type="text/javascript"></script> ЭТО НАДО ТОЛЬКО 1 РАЗ, ЕСЛИ У ВАС ОНО УЖЕ ЕСТЬ В ТЕМПЛЕЙТЕ ТО 2Й РАЗ ВСТАВЛЯТЬ НЕ НАДО <script> function post_rating(value) { $.get('/scj/tube/index.php', { 'gallery_id': '<!--GALLERY_ID-->', 'action': 'rating', 'rating': value }, function(data) { $('#rating_div').html('Thank you!'); } ); } </script>
Добавляем сами кнопки голосования и вывод рейтинга
<div id='rating_div'> current rating = <?=(<!--RATING--> == 0) ? 'not rated' : round( (<!--RATING--> - 1) * 100 ) . '%'?> <br> rate it: <span onclick='post_rating(2)' style="cursor: pointer"> +1 </span> ............................ <span onclick='post_rating(1)' style="cursor: pointer"> -1 </span> </div> +1 и -1 заменяются на пальчики, галочки и прочее что угодно
Все.
Как вы вероятно знаете, в темплейтах можно использовать пхп код. Рассмотреть все ньансы языка в одном примере конечно не получится, да и видимо не надо, однако хотелось бы показать небольшой пример. Например, нам надо вывести деск, таг <!–DESCRIPTION–> и мы решили сделать его весь большими буквами, на пхп это очень просто:
меняем <!--DESCRIPTION--> на <?php echo strtoupper('<!--DESCRIPTION-->')?>
Однако тут есть ньанс: если в деске окажется ковычка, то получится что-то вроде <?php echo strtoupper('masha's super pic')?> те незакрытая ковычка и выскочит ошибка пхп. По этой причине такой вариант “в лоб” можно использовать только если вы уверены, что во фразе не будет ковычки (напрмиер урл гали ?). В остальных случаях надо пользоваться тн префиксы tag_prefix
Пример, с <!--DESCRIPTION--> будет выглядеть как: <?php echo strtoupper('<!--ESCAPED_DESCRIPTION-->')?>
Комменты так же просто добавить
Добавляем код, который будет постить коммент без перезагрузки старницы (AJAX)
<script src='/scj/includes/js/jquery.js' type="text/javascript"></script> ---- эта строка не обязательна если jquery уже где-то инклудится, например в рейтинге. <script> function post_comment() { $.post( '/scj/tube/', { 'action': 'add_comment', 'gallery_id': '<!--GALLERY_ID-->', 'captcha': $('#captcha').val(), 'username': $('#username').val(), 'comment': $('#comment').val() }, function(data) { if (data != 'OK') { $('#comment_error').text(data); } else { $('#comment_error').text(' '); $('#add_comment').html('Thank you ! Your comment will be reviewed by admin.'); } } ); } </script>
Добавляем html форму комментов
<div id='comment_error'></div> <div id='add_comment'> <div class="clear"></div> <h4>Add comment</h4> <FORM name="add_comment" method="POST"> <div class="r_line"> <label>Name:</label> <input class="s_input" type="text" name='username' id='username' value="<?=$user['username']?>"> </div> <div class="r_line"> <label>Comment:</label> <textarea class="s_text" class="ph2" name='comment' id='comment' rows=5 cols=35 value="Leave Your Comments Here"></textarea> </div> <? if ($rot_settings['tube_comment_captcha']) { ?> <div class="r_line"> <label>Captcha:</label><div class="clear"></div><img src="/scj/tube/captcha.php" id="captcha_img" width="158" height="60" alt="Visual CAPTCHA" /> <input id='captcha' class="s_input" type="text" name='captcha' value="" /> </div> <div class="r_line"> <input type='button' value='Post Comment' onClick='post_comment();'> </div> <? } ?> </div> </form>
и добавляем вывод уже имеющихся комментов
<!--TOTAL_COMMENTS--> <comments num=1-10> <!--DATE--> <!--USERNAME--> : <!--COMMENT--> </comments>
Все.
Фактически это пример пхп кода в шаблонах
<? if ($_SERVER['GEOIP_COUNTRY_CODE'] == 'GB') { ?> код баннера 1 <? } else { ?> код баннера 2 <? } ?>
Условно надо 2 страницы с мувисным и пикчевым контентом. Например, movies.php and images.php
Варианта 2
1. Делаем все на одном темпелейте
<?php $_GET['content_type'] = 'image'; // для второго файла 'movie' include('./scj/tube/index.php');
<?php if ($_GET['content_type'] == 'image') { ?> текст 1 <? } else ?> тесткт 2 <? } обратите внимание что этот код можно использовать как в сабе так и в самом темплейте. соотвественно ссылки для пагинации будут movies.php?page=2 и тп
Вариант 2. Делаем 2 разных темпелйта например index_movies and index_images с нужным дизайном и навигацией а так же 2 файла вида
<?php $_GET['content_type'] = 'image'; // для второго файла 'movie' $_GET['force_template'] = 'index_images'; // для второго файла 'index_movies' include('./scj/tube/index.php');
Довольно просто сделать перевод меню сайта (те ссылок типа Most Popular, Order By date и прочее) на другие языки.
Rotation - CMS Templates - Tpl Custom Var добавляем кастом переменные, например most_popular, эту перменную можно использовать в темплейтах как <!–CUSTOM_VAR_MOST_POPULAR–> , при этом можно задать отдельный перевод для каждого языка.
ПО дефолту в скрипте бесплатный плеер Jwplayer, на данный момент это уже немного старый плеер, но он работает :) Если вы хотите любой другой плеер, то главное что вам надо понять что плеер и скрипт никак не связаны. Скрипт формирует html страницу где заменяет таги и все, как отображается страница зависит от браузера. Как играет мувик - зависит от плеера.
По дефолту код примрено такой
<object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="<!--FLV_WIDTH-->" height="<!--FLV_HEIGHT-->"> <param name="movie" value="/scj/tube/player/player.swf" /> <param name="allowfullscreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="flashvars" value="file=<!--FLV_URL-->&image=<!--FLV_THUMB_URL-->" /> <embed type="application/x-shockwave-flash" id="player2" name="player2" src="/scj/tube/player/player.swf" width="<!--FLV_WIDTH-->" height="<!--FLV_HEIGHT-->" allowscriptaccess="always" allowfullscreen="true" flashvars="file=<!--FLV_URL-->&image=<!--FLV_THUMB_URL-->" /> </object>
как видно тут вызывается плеер /scj/tube/player/player.swf и ему передаются парамтеры flashvars=“file=<!–FLV_URL–>&image=<!–FLV_THUMB_URL–>”. Вы можете положить свой плеер куда удобно, любой плеет, изменить темпелйт что б он загружал ваш плеер, просто проверьте как ему надо передавать параметры. Например плеер Kernel
<object id="kt_player" name="kt_player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="600" height="400"> <param name="allowscriptaccess" value="always"/> <param name="allowFullScreen" value="true"/> <param name="movie" value="http://%YOUR_DOMAIN_HERE%/player/kt_player.swf"/> <param name="flashvars" value="video_url=<!--FLV_URL-->&preview_url=<!--FLV_THUMB_URL-->"/> <embed src="http://%YOUR_DOMAIN_HERE%/player/kt_player.swf?video_url=<!--FLV_URL-->&preview_url=<!--FLV_THUMB_URL-->" width="600" height="400" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"/> </object>
Если вы хорошо наполняли базу изначально и у вас хорошие описания и очень желательно кастом галеры, то можно за 10 минут создать паралельно блог для сайта.
Все, блог готов :)
Автоподсказки когда пользователь начинает вводить поиск на основании того что искали ранее
<script type="text/javascript" src="/scj/includes/js/jquery.js"></script> Это может быть уже и есть в странице. <script type="text/javascript" src="/scj/includes/js/jquery.autocomplete.min.js"></script> Этот скрипт как раз и делает автодополнение <script> $(document).ready(function(){ $('#search_field').autocomplete({ serviceUrl: '/scj/tube/index.php?force_template=search_suggest&zero_items_to_404=off', /* Этот темпелйт будет ниже*/ onSelect: function(suggestion, data) { $('#search_field').val(suggestion.value); } }); }); </script>
немного стилей для красоты
<style> .autocomplete-suggestions { border: 1px solid #999; background: #FFF; cursor: default; overflow: auto; } .autocomplete-suggestion { padding: 2px 5px; white-space: nowrap; overflow: hidden; } .autocomplete-selected { background: #F0F0F0; } .autocomplete-suggestions strong { font-weight: normal; color: #3399FF; } </style>
само поле поиска
<input class=inputbox value='' type="text" size="30" id="search_field"> <br>
Сам темпелйт 'search_suggest'
<?php header('Content-Type: application/json'); ?>{ "query":"<!--ESCAPED_GET_QUERY-->", "suggestions":[ {"value":"","data":""} <search_log num=1-10 skip_search_log=true search=GET_query> ,{"value":"<!--ESCAPED_SEARCH_QUERY-->","data":"<!--ESCAPED_SEARCH_QUERY-->"} </search_log> ]}
Как проверить: /scj/tube/index.php?force_template=search_suggest&zero_items_to_404=off&query=… должно выдавать результат с теми поисками которые уже есть в базе
Тоже самое что выше, но подсказывает не по базе поисков, а по базе галер
styles
<style> .autocomplete-suggestions { border: 1px solid #999; background: #FFF; cursor: default; overflow: auto; } .autocomplete-suggestion { padding: 2px 5px; white-space: nowrap; overflow: hidden; } .autocomplete-selected { background: #F0F0F0; } .autocomplete-suggestions strong { font-weight: normal; color: #3399FF; } </style>
a field
<input class=inputbox value='' type="text" size="30" id="search_field"> <br>
JS code
<script type="text/javascript" src="/scj/includes/js/jquery.js"></script> <script type="text/javascript" src="/scj/includes/js/jquery.autocomplete.min.js"></script> <script> $(document).ready(function(){ $('#search_field').autocomplete({ serviceUrl: '/scj/tube/index.php?force_template=gallery_search_suggest', onSelect: function(suggestion, data) { location.href = suggestion.data; } }); }); </script>
темплейт 'gallery_search_suggest'
<?php header('Content-Type: application/xml'); ?>{ "query":"<!--ESCAPED_GET_QUERY-->", "suggestions":[ {"value":"","data":""} <thumb skip_search_log=true search=GET_query num=1-10> ,{"value":"<!--ALT-->","data":"/gallery/<!--GALLERY_SLUG-->/index.html"} </thumb> ]}
Как видно разница только в том, что в самом темплейте ,а конкретно в таге <thumb
Допустим, мы хотим создать сайт с 3 основными категориями (general (id 1) , gay (2) and shemale(3)) , у каждой из этих категорий есть подниши (условно тин, матуре и тп). Они должны быть именно подкатегориям (в редактировании категории есть поле parent category)
/?category_id=1 - выведет только то что находится в категории 1 И(!) подгруппах
Например, если он ищет по тагу и и надо из категории 1 то
/?tag=...&category_id=1
Category thumbs
Можно создать 3 сета тумб категорий как раз под эту ситуацию
Settings - System Thumbs
При выводе тумб категорий мы можем указать номер сета
<category num=1-10 set_id=2
Обратите внмание что сет так же можно передавать в урле
<category num=1-10 set_id=GET_set_id
Представим что у нас есть галерея с 3 флеш мувиками как например эта http://babesfarm.com/caprice/movies/kitchen_fuck05/index01.html
Если из нее сделать кастом галерею, но если сделать просто так то получится галерея с 3мя мувиками (в темплейте галереи спонсор грамотно сделал прямые линки на мувики для скриптом которые не умеют грабить флеш контент), 3 флешмувиками и все это будет на одной странице. А мы хотим что бы каждый из мувиков открывался на отдельной странице, как в пиксовым контентом.
Как это сделать:
1. Создадим новый темплейт для флеш галер, где на странице галеры будут толкьо тумбы этой галеры (как у пиксовой), в сами мувики будут проигрываться на отдельной странице (опять же как у пиксовых галер), допустим он у нас будет называться content_flv_gallery и темпелйт его будет
<a href='/scj/tube/?slug=<!--GALLERY_SLUG-->&force_template=content_flv_single_item&item_id=1'><img src='<!--FLASH_1_THUMB-->'></a> <br> <a href='/scj/tube/?slug=<!--GALLERY_SLUG-->&force_template=content_flv_single_item&item_id=2'><img src='<!--FLASH_2_THUMB-->'></a> <br> <a href='/scj/tube/?slug=<!--GALLERY_SLUG-->&force_template=content_flv_single_item&item_id=3'><img src='<!--FLASH_3_THUMB-->'></a> <br>
как тут не сложно заметить тут нет флешплеера и все тумбы указывают на /scj/tube/?slug=<!–GALLERY_SLUG–>&force_template=content_flv_single_item&item_id=…
где есть еще один темплейт content_flv_single_item где и будет флешплеер, а так же item_id - где передается номер мувика из галеры который и надо проиграть.
Содержимое content_flv_single_item
<? if ($_GET['item_id'] == 1) { ?> <div class="flash"> <div class="player"> <object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="<!--FLASH_1_THUMB_X-->" height="<!--FLASH_1_THUMB_Y-->"> <param name="movie" value="/scj/tube/player/player.swf" /> <param name="allowfullscreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="flashvars" value="file=<!--FLASH_1_IMAGE-->&image=<!--FLASH_1_THUMB-->" /> <embed type="application/x-shockwave-flash" id="player2" name="player2" src="/scj/tube/player/player.swf" width="<!--FLASH_1_THUMB_X-->" height="<!--FLASH_1_THUMB_Y-->" allowscriptaccess="always" allowfullscreen="true" flashvars="file=<!--FLASH_1_IMAGE-->&image=<!--FLASH_1_THUMB-->" /> </object> </div> <? } ?> <? if ($_GET['item_id'] == 2) { ?> <div class="flash"> <div class="player"> <object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="<!--FLASH_2_THUMB_X-->" height="<!--FLASH_2_THUMB_Y-->"> <param name="movie" value="/scj/tube/player/player.swf" /> <param name="allowfullscreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="flashvars" value="file=<!--FLASH_2_IMAGE-->&image=<!--FLASH_2_THUMB-->" /> <embed type="application/x-shockwave-flash" id="player2" name="player2" src="/scj/tube/player/player.swf" width="<!--FLASH_2_THUMB_X-->" height="<!--FLASH_2_THUMB_Y-->" allowscriptaccess="always" allowfullscreen="true" flashvars="file=<!--FLASH_2_IMAGE-->&image=<!--FLASH_2_THUMB-->" /> </object> </div> <? } ?> <? if ($_GET['item_id'] == 3) { ?> <div class="flash"> <div class="player"> <object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="<!--FLASH_3_THUMB_X-->" height="<!--FLASH_3_THUMB_Y-->"> <param name="movie" value="/scj/tube/player/player.swf" /> <param name="allowfullscreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="flashvars" value="file=<!--FLASH_3_IMAGE-->&image=<!--FLASH_3_THUMB-->" /> <embed type="application/x-shockwave-flash" id="player2" name="player2" src="/scj/tube/player/player.swf" width="<!--FLASH_3_THUMB_X-->" height="<!--FLASH_3_THUMB_Y-->" allowscriptaccess="always" allowfullscreen="true" flashvars="file=<!--FLASH_3_IMAGE-->&image=<!--FLASH_3_THUMB-->" /> </object> </div> <? } ?>
тут 3 практически одинаковых куска которые отличаются только <? if ($_GET['item_id'] == 1) { ? и соответственно номером подставляемого тага <!–FLASH_1_THUMB–>
2. Граб галереи
При грабе конетента либо позже через редактирование надо выставить Embed Template для этой галеры соответственно - content_flv_gallery
3. Реврайт
Урлы вида /scj/tube/?slug=<!–GALLERY_SLUG–>&force_template=content_flv_single_item&item_id=1 смотрятся не особенно красиво, поэтому можно добавить реврайт например
RewriteRule ^flash_gallery/([^/]+)/([0-9]{1,2}).html$ /scj/tube/?slug=$1&force_template=content_flv_single_item&item_id=$2&%{QUERY_STRING} [L]
и соответственно заменить в темплейте content_flv_gallery
линки вида <a href='/scj/tube/?slug=<!--GALLERY_SLUG-->&force_template=content_flv_single_item&item_id=1'><img src='<!--FLASH_1_THUMB-->'></a> на <a href='/flash_gallery/<!--GALLERY_SLUG-->/1.html'><img src='<!--FLASH_1_THUMB-->'></a>
4. Особенности этой галеры
У нее спонсор разместил 2 вида линков на контент: они флеш, другие в виде ссылок на мувики для скриптов , которыt не умеют грабить флешконтент. Это правильно, но скрипт скачает и тот и другой вариант, хотя выводить мы хотим только флеш. Для нас это плохо только тем, что будет храниться надиске часть контента, который нам не нужен. Соттветственно при доавлении контента можно в импорте выставить Add only this type of content - flash. Это сэкономит немного места на диске.
Например у нас есть кастомная пиксовая галерах с некоторым кол-вом картинок. По нажатию на тумбу открывается не сама картинка, а страницу с этой картинкой плюс какая-то допреклама и тп. Можно на этой же странице проставить линки на сл картинки этой галеры, например
<? if ($_GET['item_id'] != 1) { ?> <a href='/gallery/<!--GALLERY_SLUG-->/<?=($_GET['item_id']-1)?>.html'> Prev </a> <? } ?> <? if ($_GET['item_id'] < <!--GALLERY_TOTAL_ITEMS--> ) { ?> <a href='/gallery/<!--GALLERY_SLUG-->/<?=($_GET['item_id']+1)?>.html'> Next </a> <? } ?>
Если у вас другие реврайты не забывайте править линки.
Для контент сайтов на одной базе (мастер слейв) есть вариант организации трейдера между собой, когда серфер видит контент но уже на другом сайте сети.
Например, юзер кликает на http://domain1.com/gallery/gallery_slug/index.html, но скрипт по скиму решает послать его на трейд. В этом случае юзер не видит галеру. Если мы его отправляем на другой сайт нашей сети мы можем показать ему галеру, но уже на другом домене.
Это положительно сказывается на проде исходного сайта (человек хотел увидеть мувик - он его увидел), а так же дает возможность вокруг самого эмбеда показать другие тумбы = серфер может кликнуть на эти тумбы на сайте трейдера.
Для этого на сайте domain1.com для трейдера domain2.com указываем тип сайта - Friendly Tube. В этом случае, если скрипт решает послать на этого трейдера, то скрипт будет пересылать трейдеру slug галеры. Конечно только в том случае, если редирект на трейдера произошел при клике на контент, а не в топлисте. Те скрипт пошлет на просто на http://domain2.com/ , а добавит к урлу http://domain2.com/?try&slug=super_gallery.
На domain2.com, если конечно там так же стоит SmartCJ, скрипт видит этот слаг и открывает не индекс сайта, а редиректит на урл Try Param Redirect URL, который выглядит примерно как
http://{DOMAIN}/gallery/{GET_slug}/index.html
те редиректит на галеру. Если у вас свои реврайты, то надо поменять урл под ваши реврайты.
Это конечно актуально только при
Если на сайте трейдера не будет галеры с данным ИД - получится просто индекс
Линки на галереи в дефолтном варианте /gallery/gallary_slug/index.html для того что бы их поменять надо поменять реврайт + темпелйты , что бы формировались урлы под ваши реврайты.
Аналогично для категорий, тагов и тп.
Единственный нюанс есть с линками категорий: /category/cool/date/1/ - category слово тут меняется через реврайты как и все остальное. cool - название категории, а вот date - это уже сортировка, а скрипт должен увидеть сортировку по понятному ему признаку. Те если туда написать new_galleries_first например то он не поймет что именно надо.
Что бы поменять на такой вариант надо:
Добавить в common.php (note: все они должны быть одинаковые)
if (isset($_GET['order']) and $_GET['order'] == 'new_galleries_first') { $_GET['order'] = 'date'; } elseif (isset($_GET['order']) and $_GET['order'] == 'long_galleries_first') { $_GET['order'] = 'duration'; } else { $_GET['order'] = 'ctr'; }
Теперь вариант /category/cool/new_galleries_first/1/ будет срабатывать как надо.
Однако в самой навигации стоит SORT_ORDER, который фактически равно $_GET['order'], а нам надо наш вариант. Поэтому добавляем так же свою переменную в common.php
if (isset($_GET['order']) and $_GET['order'] == 'new_galleries_first') { $_GET['order'] = 'date'; $GLOBALS['original_sort_name'] = 'new_galleries_first'; } elseif (isset($_GET['order']) and $_GET['order'] == 'long_galleries_first') { $_GET['order'] = 'duration'; $GLOBALS['original_sort_name'] = 'long_galleries_first'; } else { $_GET['order'] = 'ctr'; $GLOBALS['original_sort_name'] = 'best_galleries_first'; }
А в темплейте вместо SORT_ORDER - используем <?=$GLOBALS['original_sort_name']?>
PS В таге навигации надо добавить skip_href_deletion=true что бы оно не чистило ваш пхп код.
Если у вас есть список кейвордов которые вы хотели вы рендомно раскидать по галерам (например создать кастом вар и потом использовать его где-то в галере) то это может сделать так:
<?php $lines = file('/FULL/PATH/TO/keywords.txt'); echo $lines[rand(0, count($lines) -1)];
If this field = URL Contains this value = http Then Search For = * in This Field = Custom field 1 And Replace it With = external:http://domain/kw.php
Все.
Основное тут external:http://domain/kw.php, те кастом вар будет получать значение которое выдаст external:http://domain/kw.php.
Допустим нам надо создать сайт 3 основными нишами и Х дополнительных.
Основные нишы: general (id 1) , гай (2) и шмель (3) и например 100 ниш вида teen (id 4), amateur (id 5) и так далее
Логично, что если человек хочет видеть general, но остальные 2 и 3 онс корее всего видеть не хочет. Те по категориям 1 2 и 3 должна быть глобальная фильтрация.
Таким образом все галеры на сайте у нас оказываются как минимум в 2х категориях: одной из 1 2 3 и как минимум в одной из остальных (в нашем примере 4 и 5).
При выводе галер мы можем ограничить то, что хочет видеть серфер. Например, он хочет ввидеть тин (4) и только general (те надо исключить группы 2 и 3) - ссылка получается
/?group_id=4&skip_group_id=2,3
Если надо видеть тин, но который в группе гай (это значит надо исключить 1 и 3) то ссылка будет
/?group_id=4&skip_group_id=1,3
По такой же схеме можно разделить например таги
/?tag=...&skip_group_id=1,3
Тумбы категорий:
Settings - System Thumbs можно настроить нужное кол-во тумб категорий. В данном случае нам надо 3 набора (сета) тумб категорий - для каждой из групп 1 2 и 3. Для того, что бы фильтровать тумбы категории есть поле Skip group ids, comma separated
Например, для категории 1, в которой мы не хотим видеть тумбы из категорий гай и шмель мы должны записать 2,3. Сет 2 у нас будет гай, те мы исключим группы дженерал (1) и шмель (3), те запишем туда 1,3.
При выводе тумб категорий мы можем указать какой сет выводить, например выведем сет 2
<category num=1-10 set_id=2
Для удобства номер сета можно брать из урла /?set_id=2
<category num=1-10 set_id=GET_set_id
Тк мы не хотим выводить саму текущую группу то тут пригодится параметр skip_group_id (те выводя сет 2 нам саму группу гай (2) выводить не надо) /?set_id=2&skip_group_id=2
<category num=1-10 set_id=GET_set_id skip_group_id=GET_skip_group_id
Как можно видеть в данном примере у нас ИД категории и сета совпадают, поэтому таг можно сделать даже
<category num=1-10 set_id=GET_set_id skip_group_id=GET_set_id
но что бы не было путаницы в примере такой замены мы делать не будем.
Кроме того, в каких-то категории могут быть специфическими для какой-то ниши и поэтому там может не оказаться галер, поэтому имеет смысл добавить min_gallery_count=1 что бы не выводить пустые категории
<category num=1-10 set_id=GET_set_id skip_group_id=GET_set_id min_gallery_count=1
По дефолту контент лежит в scj/thumbs/galleries/…/1.jpg и условно мувик к нему scj/thumbs/galleries/…/1.flv
На странице мы выводим <img src='/scj/thumbs/galleries/…/1.jpg'>, и в проигрывателе мувиков что-то вроде file: /scj/thumbs/galleries/…/1.flv
И серфер видит прямой линк на /scj/thumbs/galleries/…/1.flv и может скачать мувик. Например, мы решили сделать жизнь пользователя немного тяжелее и не дать ему скачать по прямой линке. Как это сделать (из расчета что у нас nginx):
1. сначала в конфиге nginx запретим скачивать файлы напрямую
location ~* /scj/thumbs/galleries/.*\.(flv)$ { deny all; }
и добавляем туда же секретную локацию
location /protected { root /var/www; internal; }
2. немного подправим темплейт. Например сейчас он выглядит примерно так
<a href='<!--IMG_1_IMAGE-->'><img src='<!--IMG_1_THUMB-->'></a>
что нам дает примерно такой результат
<a href='/scj/thumbs/galleries/482/850/1_201.flv'><img src='/scj/thumbs/galleries/482/850/1_t.jpg'></a>
мы добавим /content.php?check=<?=time()?>&url=
<a href='/content.php?check=<?=time()?>url=<!--IMG_1_IMAGE-->'><img src='<!--IMG_1_THUMB-->'></a>
и в результате получится
<a href='/content.php?check=1511450638&url=/scj/thumbs/galleries/482/850/0_771.flv'><img src='/scj/thumbs/galleries/482/850/0_t.jpg'></a>
3. создаем content.php
<?php if (!$_GET['check'] or $_GET['check'] < time() - 86400) { die("Error link"); } header("X-Accel-Redirect: /protected/" . $_GET["url"]);
Итого если вы настроили верно nginx то при прямом запросе /scj/thumbs/galleries/482/850/0_771.flv должно выдавать 403.
По линке /content.php?check=1511450638&url=/scj/thumbs/galleries/482/850/0_771.flv должно отдавать файл, тут 1511450638 - это просто unix time. Его можно заменить на что угодно.
Например, человек искал какой-то кейворд которого у вас на сайте нет, ему выдало 0 результатов поиска. Но вы хотели бы показать хоть что-то.
Есть 3 варианта:
Первый
По умолчанию если ничего не найдено - показывает темпелйт content_not_found , те если там вывести
<thumb num=1-10 order=easy_random >
то это и будут ваши рендомные галеры
Вариант 2
если не хочется менять content_not_found то делаем отдельный темплейт random_content
Nothing found , look at those links <thumb num=1-10 order=easy_random zero_items_to_404=off> ....
а сам темплейт (content_search) поиска поменять как
<?if (<!--TOTAL_ITEMS--> == 0) { ?> <script> window.location.replace("https://yourdomain/?force_template=random_content"); (тут конечно реврайт какой добавляем) </script> <? } else { ?> выводим тумбы как обычно в поиске <? } ?>
в этом сулчае ничего лишнего не добавляется.
Вариант 3
Просто меняем content_search как
<?if (<!--TOTAL_ITEMS--> == 0) { ?> Nothing found , look at those links <thumb num=1-10 order=easy_random search="" zero_items_to_404=off> .... <? } else { ?> <thumb num=1-10 zero_items_to_404=off page_main_tag=true> .... выводим тумбы как обычно в поиске <? } ?>
Этот вариант проще но минус в том, что даже если что-то найдено то <thumb num=1-10 order=easy_random> таг будет обработан ( пхп отразабывает после макросов скрипта) а это значит немного больше нагрузки.
Это пример использования кеша в темпелйтах и макросах
Добавляем в темплейт галерей (например content_page) следующий кусок кода
Current gallery id: <!--GALLERY_ID--> <br><br><br> <? if ((int) '<!--GALLERY_ID-->') { $last_items = Cache::get('last_items'); if (!$last_items) $last_items = array(); if ($last_items[0] != (int) '<!--GALLERY_ID-->') array_unshift($last_items, (int) '<!--GALLERY_ID-->'); $last_items = array_slice($last_items, 0, 100, true); Cache::set('last_items', $last_items, 3600); } ?> <thumb num=1-10 limit_by_gallery_id=true order=row gallery_id=CACHE_last_items cache_time=10> Last visited: <!--GALLERY_ID--><br> </thumb>
Тут надо отметить для себя
Тут надо понимать что
Тут есть 2 варианта:
Тут надо немного более глубокое понимание процесса.
У вас есть страница сайта, что бы не генерить ее для каждого серфера - она генерится и сохраняется в кеше на какое-то время, таким образом для следующих посетителей не надо генерить страницу по новой. Если мы хотим показать как в примере выше, но по странам - нам надо как минимум для каждой страны переделать страницу, учитывая что в мире 190 стран - значит надо будет генерить в 190 раз больше страниц (под каждую страну отдельно)
Что бы избежать этого можно пойти другим путем
Пошагово как сделать
1. в темплейт галеры добавляем
id: <!--GALLERY_ID--> <? if ((int) '<!--GALLERY_ID-->') { $cache_id = 'last_items_' . $_SERVER['GEOIP_COUNTRY_CODE']; $last_items = Cache::get($cache_id); $last_items[(int) '<!--GALLERY_ID-->'] = (int) '<!--GALLERY_ID-->'; $last_items = array_slice($last_items, 0, 100); Cache::set($cache_id, $last_items, 86400); } ?>
тут в кеш перменную
$cache_id = 'last_items_' . $_SERVER['GEOIP_COUNTRY_CODE'];
добавляется список галер (последние 100). Как видно перменная зависит от страны.
2. создаем новый темпелйт viewed_in_country
<thumb num=1-10 limit_by_gallery_id=true gallery_id=CACHE_GET_last_viewed_cache_id order=row > <!--GALLERY_ID--> ......<br> </thumb>
тут надо обратить внимание на gallery_id=CACHE_GET_last_viewed_cache_id те список gallery_id берем из CACHE, переменная которая будет передана в GET с именем last_viewed_cache_id
3. там где надо вывести список галер по текущей стране
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> last viewed in <?=$_SERVER['GEOIP_COUNTRY_CODE']?> <script language="JavaScript" type="text/JavaScript"> $(document).ready(function(){ $.get('./?force_template=viewed_in_country&last_viewed_cache_id=last_items_<?=$_SERVER['GEOIP_COUNTRY_CODE']?>' , {}, function(data) { $('#last_viewed').html(data); } ); }); </script> <div id='last_viewed'></div>
тут основное это то что мы запрашиваем урл
./?force_template=viewed_in_country&last_viewed_cache_id=last_items_<?=$_SERVER['GEOIP_COUNTRY_CODE']?>
где в перменной last_viewed_cache_id передаем из какого cache id надо брать список галер, а эта перменная будет своя для каждой страны.
полученное содержимое вставляем в div = last_viewed
Итого для теста надо
У мастера и слейвов набор галерей совпадает тк это одна база. Значит мы может устроить трейд между сайтами на одной базе таким образом, что бы при переходе к трейдеру первая тумба совпадала с той по которой кликнули. Это должно поднять проду.
Как сделать: простой вариант что бы было понятно
1. на сайте А серфер кликнул на галеру 12345, при переходе на трейдера (сайь Б) нам надо сайту Б дать знать какую галеру показать первой (ид 12345). для этого в параметрах аута должен быть ИД галеры по которой кликнули , например
<thumb num=1-10> <a href='/scj/cgi/out.php?show_gallery_id=<!--GALLERY_ID-->'> click <!--GALLERY_ID--> </a> <br> </thumb>
как видно тут на аут передается параметр show_gallery_id=, урлы будут вида out.php?show_gallery_id=12345
2. На сайте А меняем урл трейдера (сайт Б) (только тех которые на одной базе и буду поддерживать эту фичу)
http://trader/?first_gallery_id={GET_show_gallery_id}
тут надо отметить появление {GET_show_gallery_id} из пункта 1, те при переходе к трейдеру этот параметр будет заменен на то что передано ауту, и к трейдеру пойдет http://trader/?first_gallery_id=12345
3. у трейдера в темплейте индекс добавляем
<thumb num=1 gallery_id=GET_first_gallery_id limit_by_gallery_id=true> first gallery <!--GALLERY_ID--> <!--THUMB_URL--> <br> </thumb>
тут надо отметить gallery_id=GET_first_gallery_id который берется из пункта 2
Все.
Есть полезная опция ротации
Rotate page for raws ie if surfer visits us for a second time - show him second page instead of the first one
те если серфер заходит на индекс сайта, то мы автоматически можем менять параметр &page=, те при первом заходе юзер видит фактически &page=1, при втором (когда юзер уже не уник) &page=2 - те если у вас на индексе выводятся просто тумбы
<thumb num=1-10>
то при первом заходе юзер увидит тумбы 1-10, при 2м тумбы номер 11 - 20.
Если же у вас на индексе тумбы категорий то ситуация другая и есть 2 варианта
1. если у вас например всего 100 категорий, а вы выводите на индексе 50
<category num=1-50 adjust_num_to_page=true
то на первый заход будут категории 1 - 50, а на второй 51 - 100
2. если у вас всего 100 категорий и вы выодите все 100 на индексе
<category num=1-100
в этой ситуации что бы показать другие тумбы надо создать дополнительный комплект тумб категорий. Для этого в сетингах ротации Category thumbs - включаем set 2 (и например еще и set 3). У нас получается 3 комплекта тумб категорий.
в темплейте добавляем номер сета
<category order=clicks num=1-10 set_id=GET_page> <!--CATEGORY_NAME--> <!--THUMB_URL--> <br> </category>
тут надо обратить внимание на set_id=GET_page. И скрипт будет ротировать 3 сета тумб категорий.
Если используется один и тот же код для вставки рекламы то я часто вижу что-то вроде
1. создаем темплейт ads в котором
$ads = '<a href= .. > <img = .. ';
2. в темплейтах страниц добавляется в разных местах
<?=ads?>
Проблема в том
Если использовать Rotation - CMS -TPL Custom var то можно