User Tools

Site Tools


Writing /home/user/smartcj.com/wiki/data/cache/8/8c77fa4733ea812737d678e97cc2197a.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/user/smartcj.com/wiki/data/cache/8/8c77fa4733ea812737d678e97cc2197a.metadata failed
ru:new_rotation_faq

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ru:new_rotation_faq [2021/11/12 12:47] – [Site menu] adminru:new_rotation_faq [2026/02/24 23:58] (current) – [Filter request parameters] admin
Line 183: Line 183:
  
  
-===== Почему у меня на старнице пустое облако тагов =====+===== Почему у меня на странице пустое облако тагов =====
  
 Облако тагов генерится из активных тагов раз в 30 минут и кладется в кеш. Соответственно варианты: Облако тагов генерится из активных тагов раз в 30 минут и кладется в кеш. Соответственно варианты:
Line 240: Line 240:
   - Смотрим в rot_linked_db номер слейва, который мы отсоединяем (Х)   - Смотрим в rot_linked_db номер слейва, который мы отсоединяем (Х)
   - Отсоединяем нужный слейв от мастера   - Отсоединяем нужный слейв от мастера
-  - Заливаем в базу бывшего слева (дамп) из пункта 1, но только таблицы rot_* +  - Заливаем в базу бывшего слева (дамп) из пункта 1, но только таблицы rot_gallery_info, rot_gallery_statsX, rot_gallery_dataX и rot_thumbs 
-  - Удаляем все rot_gallery_stats* кроме номера из п2 +  - rot_gallery_statsХ переименовываем в rot_gallery_stats1, rot_gallery_dataX - в rot_gallery_data1 
-  - rot_gallery_statsХ переименовываем в rot_gallery_stats1 +
-  В rot_linked_db удаляем все записи кроме записи с ИД 0+
  
  
Line 270: Line 269:
  
  
 +===== Category statuses =====
 +
 +У категорий 3 статуса: 
 +
 +  - активна - выводится в <category и галеры из нее выводятся в <thumb
 +  - не актвна - не выводится в <category и галеры из нее не выводятся в <thumb
 +  - hidden - **не выводится** в <category, но галеры из нее выводятся в <thumb
 ===== Как импортировать очень большой дамп ===== ===== Как импортировать очень большой дамп =====
  
  
 Версия 2.* умеет добавлять большие файлы через importset самостоятельно (теоретически любого размера). Просто добавляете урл и он постепенно все добавит. Версия 2.* умеет добавлять большие файлы через importset самостоятельно (теоретически любого размера). Просто добавляете урл и он постепенно все добавит.
- 
-Для версии 1.* рекомендуется следующий вариант: 
- 
-Например у нас есть задача импортировать много тысяч галерей, достаточно много что бы они не влезали в просто импорт (например сервер не успевает пройти их все по таймауту или размер POST ограничен и тп.). В Import Set так же добавить большой нельзя тк импортсет предполагает видеть какие-то апдейты, а не 100 000 новых галер постоянно. Одна из причин ограничений в ImportSets в том и заключалась, что люди добавляли массу импортсетов по 100к галер, которыя парсились постоянно все 100к * соклько там было импортсетов таких , это все проверялось в базе и таким образом создавало нагрузку на сервак. 
- 
-Дабы импортировать большой файл равномерно и хорошо для сервака надо: 
- 
-  * Создать и залить на сервак файл cut.php следующего содержимого  
- 
-<code> 
- 
-<?php 
- 
-error_reporting(E_ALL & ~E_NOTICE); 
- 
-if (!$_GET['file']) die("\n You have to pass file=... parameter in URL"); 
-if (!file_exists($_GET['file'])) die("\n File {$_GET['file']} does NOT exists. Check path. "); 
-if (!is_writeable($_GET['file'])) die("\n File {$_GET['file']} is NOT writeable. Set 666 permissions. "); 
- 
-if (!file_exists('./tmp.file') or !is_writeable('./tmp.file')) die("\n File tmp.file does not exists OR is NOT writeable. Set 666 permissions. "); 
- 
-echo passthru("head -n500 {$_GET['file']} "); 
-if (!$_GET['test']) exec("tail -n +500 {$_GET['file']} > tmp.file; cp tmp.file {$_GET['file']} "); 
- 
-</code> 
- 
-  * Залить туда же дамп и поставить 666 на этот файл  
-  * Залить туда же пустой файл tmp.file и так же 666 на него 
-  * Добавить ImportSet с урлом http://yourdomain/path_to/cut.php?file=имя_файла_дампа&test=true 
-  * Нажать Test и распределить поля как надо.  
-  * cut.php выдает по 500 строк из большого дампа и урезает файл на эти же 500 строк. Таким образом каждый раз когда импортсет будет запрашивать новые строки - он будет получать по 500 строк, равномерно добавляя их в базу.  
-  * Наличие &test=true надо дабы в момент теста файл не обрезался на 500 строк. После тестирования &test=true надо убрать из урла те урл станет http://yourdomain/path_to/cut.php?file=имя_файла_дампа 
- 
-Все. 
- 
-Через какое-то время весь дамп будет добавлен и сам файл дампа станет нулевым по размеру и даже если вы забудете убрать его из импортсетов он будет выдавать пустой ответ и не будет нагружать сервер. 
- 
  
  
Line 317: Line 286:
 Если при заходе на любую страницу у вас пишет что-то вроде "Parse error: some error, in /some/path/scj/tube/index.php(0) : eval()'d code on line 1717" - это 100% значит что у вас ошибка в вашем пхп коде в темплейте. Если при заходе на любую страницу у вас пишет что-то вроде "Parse error: some error, in /some/path/scj/tube/index.php(0) : eval()'d code on line 1717" - это 100% значит что у вас ошибка в вашем пхп коде в темплейте.
  
-По опыту наиболее частой проблемой является несоблюдение ковычек. http://smartcj.com/wiki/doku.php?id=ru:new_rotation_hints#php_code_%D0%B2_%D1%82%D0%B5%D0%BC%D0%BF%D0%BB%D0%B5%D0%B9%D1%82%D0%B0%D1%85+По опыту наиболее частой проблемой является несоблюдение ковычек. http://smartcj.com/wiki/doku.php?id=ru:new_rotation_hints#php_code_in_template
  
  
Line 575: Line 544:
  
 Так же есть опция "Log empty search queries " и если по запросу ничео не найдено то логгить его не будет. Так же есть опция "Log empty search queries " и если по запросу ничео не найдено то логгить его не будет.
 +
 +
 +После апдейта в настройка ротации добавлена опция которая делает тоже самое
 +
 +<code>
 +Search query filter pattern (regexp)
 +we use php preg-replace function to replace non-valid characters in user input
 +ie when a surfer searches on your site
 +a good pattern to start is
 +/[^\p{L}\p{N}\s]/
 +
 +</code>
 ===== Multiniche trade ===== ===== Multiniche trade =====
  
Line 654: Line 635:
 ===== Site menu ===== ===== Site menu =====
  
-Довольно просто сделать перевод меню сайта (те ссылок типа Most Popular, Order By date и прочее) на другие языки.+Довольно просто сделать перевод меню сайта (те ссылок типа Most Popular, Order By date и прочее) на другие языки. Например у нас есть фраза "Самые популярные". И несколько языков для которых эту фразу надо переводить. 
 + 
 + 
 +Rotation - CMS - TPL Custom Vars создаем переменную most_popular, ее можно будет использовать в темплейте как <!--CUSTOM_VAR_MOST_POPULAR--> (это подписано прямо с созданной переменной). Там же можно указать перевод для языковых слейвов. 
 + 
 + 
 + 
 + 
 + 
 +====== Case Sensitive URLs ====== 
 + 
 +По стандарту урлы - case sensitive, те большая или маленькая буква - имеет значение. Однако, большинство людей почему-то считает, что нет, поэтому урлы в базу попадают в разных вариантах, при этом возникают вопросы "почему я ищу http://domain/aaa и не находит? когда в базе запись http://domain/AAA. Что бы избежать этого по умолчанию в базе поле урла - case insensitive что б не было вопросов с поиском. 
 + 
 +Однако бывает, что урлы действительно разные и надо что б база отличала регистр. Для этого надо в базе выполнить  
 + 
 +  ALTER TABLE `rot_gallery_info` CHANGE `url` `url` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;  
 +  ALTER TABLE `rot_gallery_info` CHANGE `source_url` `source_url` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;  
 +   
 +и помнить что после этого урлы из примера выше станут разными и при поиске урла надо будет смотреть на регистр букв. 
 + 
 + 
 +====== How to move thumbs ====== 
 + 
 +По умолчанию тумбы сохраняются в /scj/thumbs. Если вы хотите сменить место хранения тумб после того как добавили контент то надо  
 + 
 +  - физически переместить тумбы из scj/thumb в новое место  
 +  - сменить URL to thumbs в CJ settings - grabber settings 
 + 
 +====== Full page cache ====== 
 + 
 +Для высоконагруженных сайтов значительно помогает кешить страницы в уже выполненном виде. Например, у нас есть темплейт 
  
-1. Делаем кастом темплейт например languages в котором будет код слов 
 <code> <code>
-<?php  
-$my_keywords['en'] = array( 
-  'most_popular' => 'Most popular', 
-  'order_by_date' => 'Order By Date', 
-  и так далее 
-); 
-$my_keywords['ru'] = array( 
-  'most_popular' => 'Самые популярные', 
-  'order_by_date' => 'Сортировать по дате', 
-  и так далее 
-); 
  
-$my_keywords['de'array( +<thumb num=1-2> 
-  'most_popular' ='Populärste', +<!--THUMB_URL-->  
-  'order_by_date' ='Sortiert nach Datum', +</thumb>
-  и так далее +
-);+
  
-и так далее сколько угодно языков+<?php 
 +echo "date: " . date("Y-m-d"); 
 +?>
  
-далее 2 варианта подставления языка: +</code>
  
-по языку браузера 
  
-if (strstr($_SERVER['HTTP_ACCEPT_LANGUAGE']'ru')) { +Скрипт парсит темплейт и заменяет данными из базы и кладет в кешчто б для следующего серферакоторый будет смотреть эту же страницу уже не заменять таги скрипта
-  $lang = $my_keywords['ru']; +
-} elseif (strstr($_SERVER['HTTP_ACCEPT_LANGUAGE']'de')) { +
-  $lang = $my_keywords['de']; +
-} else $lang = $my_keywords['en'];+
  
-или по geo_ip+<code>
  
-if ($_SERVER['GEOIP_COUNTRY_CODE'] =='RU') { +/thumbs/img1.jpg 
-  $lang = $my_keywords['ru']; +/thumbs/img2.jpg
-} elseif ($_SERVER['GEOIP_COUNTRY_CODE'] =='DE') { +
-  $lang = $my_keywords['de']; +
-} else $lang = $my_keywords['en'];+
  
 +<?php
 +echo "date: " . date("Y-m-d");
 +?>
  
-надеюсь в обоих примерах понятно как добавить больше языков+</code>
  
-и в конце темпелйта 
  
-if ($_GET['force_lng'] and isset($my_keywords[$_GET['force_lng']])) { +при этом пхп код кешится в исходном виде. Те для каждого серфера этот пхп код будет выполняться. 
-  setcookie('force_lng'$_GET['force_lng']time() + 86400); + 
-  $lang = $my_keywords[$_GET['force_lng']]; +В большинстве случаев это мелочи по нагрузкеоднако при большом трафекогда надо снизить нагрузку на проц, можно кешировать и пхп код, те страница будет закешена уже с выполненном виде, например 
-} elseif ($_COOKIE['force_lng'] and isset($my_keywords[$_COOKIE['force_lng']])){ + 
-  $lang = $my_keywords[$_COOKIE['force_lng']]; +<code> 
-} else $lang = $my_keywords['en'];+ 
 +/thumbs/img1.jpg 
 +/thumbs/img2.jpg 
 + 
 +date: 2023-01-01
  
-Все, конец темплейта :) 
 </code> </code>
  
-2. во всех темпелйтах где надо будут разные языки инклудим этот созданный темплейт+ 
 +В большинстве случаев - это ок, тк результат выполнения кода одинаковый для всех серферов. 
 + 
 +Однако бывают редкие ситуации когда в темплейте есть код, который должен быть выполнен для каждого юзера тк зависит например от текущего IP пользователя. Для этого есть опция  
 + 
 +  $config['full_page_cache'] = true; 
 + 
 + 
 +В этом случае в темплейте можно использовать таг
  
 <code> <code>
-<!--INCLUDE_TEMPLATE_languages-->+<php_code no_cache=true> 
 +<?php 
 +echo "user IP: " . $_SERVER['REMOTE_ADDR']; 
 +?> 
 +</php_code>   
 </code> </code>
  
 +и именно этот код не будет закеширован.
 +
 +
 +Например темплейт
  
-3. В темпелейтах соответствующие слова заменяем на переменные, например  
 <code> <code>
-Most popular меняем на <?=$lang['most_popular']?+ 
-Order By Date меняем на <?=$lang['order_by_date']?> +<thumb num=1-2
-и так далее+<!--THUMB_URL-->  
 +</thumb> 
 + 
 +<?php 
 +echo "Rand: " . rand(0, 100); 
 +?> 
 + 
 +<php_code no_cache=true> 
 +<?php 
 +echo "user IP: " . $_SERVER['REMOTE_ADDR']
 +?> 
 +</php_code>    
 + 
 </code> </code>
  
-с этого момента у вас уже должны быть разные описания для разных языков+будет закешен как 
  
-4. даем юзеру возможность переключить язык "насильно" 
  
 <code> <code>
-для этого ставим линку вида 
  
-http://domain/?force_lng=de (и тп нужных язык в зависимости от массива ваших языков в $my_keywords['de'])+/thumbs/img1.jpg 
 +/thumbs/img2.jpg 
 + 
 +Rand: 22  (тут надо обратить внимание что этот пхп код закешен в выполненном виде) 
 + 
 +<?php 
 +echo "user IP: " . $_SERVER['REMOTE_ADDR'];    
 + 
 +// а тут пхп код в исходном виде и будет выполнен для каждого серфера 
 + 
 +?> 
  
 </code> </code>
  
  
-Все. 
  
 +Надо что надо обратить внимание при изменении темплейта под full_page_cache. Например, у вас код
  
 +<code>
  
 +<?php
 +$img_src_hash = md5($_SERVER['REMOTE_ADDR']);
 +?>
  
 +<img_src='get_img.php?hash=<?=$img_src_hash?>'
  
-====== Case Sensitive URLs ======+some more HTML
  
-По стандарту урлы - case sensitive, те большая или маленькая буква - имеет значение. Однако, большинство людей почему-то считает, что нет, поэтому урлы в базу попадают в разных вариантах, при этом возникают вопросы "почему я ищу http://domain/aaa и не находит? когда в базе запись http://domain/AAA. Что бы избежать этого по умолчанию в базе поле урла - case insensitive что б не было вопросов с поиском.+</code>
  
-Однако бывает, что урлы действительно разные и надо что б база отличала регистр. Для этого надо в базе выполнить +закешировать полностью мы не можем тк этот код должен быть разным для каждого серфераЧто бы хэш не кешировало хочется сделать
  
-  ALTER TABLE `rot_gallery_info` CHANGE `url` `url` VARCHAR(255CHARACTER SET utf8 COLLATE utf8_bin NOT NULL+<code> 
 + 
 +<php_code no_cache=true> 
 +<?php 
 +$img_src_hash = md5($_SERVER['REMOTE_ADDR']); 
 +?> 
 +</php_code>    
 + 
 + 
 +<img_src='get_img.php?hash=<?=$img_src_hash?>' 
 + 
 +some more HTML 
 + 
 +</code> 
 + 
 +однако тут надо обратить внимание на то, что get_img.php?hash=<?=$img_src_hash?> запишется в кеш уже в выполненном виде, условно get_img.php?hash=322jjJ!.... , те ту часть, где надо выводить оперативные данные так же надо переносить внутрь и код должен быть  
 + 
 + 
 +<code> 
 + 
 +<php_code no_cache=true> 
 +<?php 
 +$img_src_hash = md5($_SERVER['REMOTE_ADDR']); 
 +?> 
 + 
 +<img_src='get_img.php?hash=<?=$img_src_hash?>' 
 + 
 +</php_code>    
 + 
 + 
 +some more HTML 
 + 
 +</code> 
 + 
 + 
 +**Вероятные ошибки** 
 + 
 +Нельзя  включать <php_code no_cache=true> в другой блок <php_code no_cache=true>. Например,  
 + 
 + 
 +<code> 
 + 
 +<php_code no_cache=true> 
 +<?php 
 +$img_src_hash = md5($_SERVER['REMOTE_ADDR']); 
 +?> 
 + 
 +some HTML 
 + 
 +<php_code no_cache=true> 
 + 
 +Another code 
 + 
 +</php_code>    
 + 
 +more HTML 
 + 
 + 
 +</php_code>    
 + 
 + 
 +some more HTML 
 + 
 +</code> 
 + 
 + 
 +В этом случае это очевидно, но может быть вариант  
 + 
 + 
 + 
 +<code> 
 + 
 +<php_code no_cache=true> 
 +<?php 
 +$img_src_hash = md5($_SERVER['REMOTE_ADDR']); 
 +?> 
 + 
 +</php_code>    
 + 
 + 
 +<!--INCLUDE_TEMPLATE...  
 + 
 +some more HTML 
 + 
 +</code> 
 + 
 + 
 +в том темплейте который вы инклудите - так же есть <php_code no_cache=true> 
 + 
 + 
 +====== GET variables pass-through ====== 
 + 
 +Например, у вам пришел хит с параметром  
 + 
 +  http://your_domain/?param=123
      
-и помнить что после этого урлы из примера выше станут разными и при поиске урла надо будет смотреть на регистр букв.+вы хотите этот param вывести где на странице что бы получилось например 
 + 
 +  <img src='https://your_tracker/?param=123'> 
 + 
 +все что надо сделать это в темплейте 
 + 
 +    <img src='https://your_tracker/?param=<!--GET_param-->'> 
 +     
 +GET_param - будет заменен на актуальное значение 
 + 
 +====== Reset Models  ====== 
 + 
 +Если у вас уже есть база галер, скажем в описаниях галер есть имена моделей. Сами модели просто добавлены в Rotation - Models. 
 + 
 +Задача назначить модели галерам (Rotation - special - Reset models) 
 + 
 +Поиск имени модели идет через встроенный поиск, настройки которого находятся в Rotation - Settings. 
 + 
 +Есть 3 варианта 
 + 
 +1. Просто mysql - ищем по " имя_модели ". тут важно отметить 2 пробела, потому что имя модели например Ola может быть частью ebola например. Проблема в то, что в дефолтной версии mysql не умеет искать даже в с учетом регистра букв 
 + 
 +2Mysql fulltext - этот поиск уже умеет искать с учетом больших букв  
 + 
 +3. Sphinx умеет искать с учетом регистра и даже разных окончаний 
 + 
 +Поэтому если вам надо более качественное назначение моделей + более качественный поиск в целом, надо как минимум включать mysql fulltext 
ru/new_rotation_faq.1636721224.txt.gz · Last modified: by admin