Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Тематические форумы > Разработка расширений / TYPO3 extension development

Ответ
 
Опции темы Опции просмотра
Старый 16.06.2012, 20:32   #1
Ивано
Guest
 
Сообщений: n/a
По умолчанию Кэширование расширения (4 варианта: кэшировать, не кэшировать, управлять, по времени.

Добрый день.

Есть заготовка стандартного расширения создаваемая через kickstarter:
которая подключается в ext_localconf.php через t3lib_extMgm::addPItoST43($_EXTKEY, 'pi1/class.tx_test.php', '_pi1', 'list_type', 0);
где как понимаю значение 0 - не кэшировать, а 1 - это-кэшировать

--------

PHP код:
<?php


class tx_test_pi1 extends tslib_pibase {
    var 
$prefixId      'tx_test_pi1';       
    var 
$scriptRelPath 'pi1/class.tx_test_pi1.php';  
    var 
$extKey        'test';    
    var 
$pi_checkCHash true;
    
 
    function 
main($content$conf) {
        
$this->conf $conf;
        
$this->pi_setPiVarDefaults();
        
    
        
$content='Привет страна - Случайное значение =  ' rand (1100);
    
        return 
$this->pi_wrapInBaseClass($content);
    }
}



?>
Вопрос про варианты кэширования:

1. Как правильно включить кэширование данного расширения.
Случайное значение rand (1, 100) должно вывестись только один раз и все

2. Как правильно отключить кэширование данного расширения.
Случайное значение rand (1, 100) должно постоянно генерироваться по новому

3. Возможно ли кэшировать на определенный период времени, либо до определенного периода времени?

и 4. Возможно ли по ходу расширения указывать где кэшировать, а что не кэшировать (т.е. управлять кэшированием)...

Т.е. так

//Включил кэш
$content=' Hellow Word - Случайное значение = ' . rand (1, 100);

//Выключил кэш
$content=' Hellow Word - Случайное значение = ' . rand (1, 100);

//Включил кэш
$content=' Hellow Word - Случайное значение = ' . rand (1, 100);

//Выключил кэш
$content=' Hellow Word - Случайное значение = ' . rand (1, 100) ;


Спасибо.
  Ответить с цитированием
Старый 18.06.2012, 17:52   #2
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

1. В TS шаблоне расширение должно быть объявлено как = USER
2. Тоже, но как = USER_INT
3. В TYPO3 версии 4.6 и выше появилось свойство кэширование с указанием времени в stdWrap. Еще есть старый экст coago. Есть более новый enetcache.
4. Своей программной логикой на PHP, можно используя "caching framework" ядра начиная с версии 4.3. А можно что хотите.
dmartynenko вне форума   Ответить с цитированием
Старый 18.06.2012, 20:04   #3
Ивано
Guest
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от dmartynenko Посмотреть сообщение
1. В TS шаблоне расширение должно быть объявлено как = USER
2. Тоже, но как = USER_INT
3. В TYPO3 версии 4.6 и выше появилось свойство кэширование с указанием времени в stdWrap. Еще есть старый экст coago. Есть более новый enetcache.
4. Своей программной логикой на PHP, можно используя "caching framework" ядра начиная с версии 4.3. А можно что хотите.
Как понимаю решение всех вариантов можно найти в "caching framework".
  Ответить с цитированием
Старый 18.06.2012, 20:07   #4
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Варианты 1-2 существуют в TYPO3 ну очень давно, еще до появления caching framework.

В варианте 4 все на ваше усмотрение. Можете использовать caching framework, а мы чаще используем memcached напрямую.
dmartynenko вне форума   Ответить с цитированием
Старый 18.06.2012, 20:22   #5
Ивано
Guest
 
Сообщений: n/a
По умолчанию

Правильно понимаю, что это из этой серии и для этого нужен EXTBASE?
http://www.tomaj.sk/2011/03/22/typo3-caching-framework/
http://daniel.lienert.cc/blog/blog-p...ion-verwenden/
  Ответить с цитированием
Старый 19.06.2012, 12:07   #6
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Нет, никакой extbase не нужен. Вторая ссылка в вашем примере это как раз оно (обычные настроки и использование классов ядра). Только как кэшь используется БД. Если у вас полноценный выделенный сервер и достаточно ОЗУ, то лучше использовать что-то вроде memcached. На БД в TYPO3 и так нагрузки хватает.
dmartynenko вне форума   Ответить с цитированием
Старый 23.06.2012, 10:42   #7
Ивано
Guest
 
Сообщений: n/a
Smile

Цитата:
Сообщение от dmartynenko Посмотреть сообщение
Нет, никакой extbase не нужен. Вторая ссылка в вашем примере это как раз оно (обычные настроки и использование классов ядра). Только как кэшь используется БД. Если у вас полноценный выделенный сервер и достаточно ОЗУ, то лучше использовать что-то вроде memcached. На БД в TYPO3 и так нагрузки хватает.
Спасибо.
Хорошо - попробую и то и то...
  Ответить с цитированием
Старый 25.06.2012, 23:53   #8
Ивано
Guest
 
Сообщений: n/a
По умолчанию

В общем с выше описанным ничего не выходит...
Нашел еще ссылку:

что это за способ кэширования?
http://buzz.typo3.org/people/steffen...in-extensions/
http://wiki.typo3.org/Functions_for_t3lib_cache
  Ответить с цитированием
Старый 26.06.2012, 11:04   #9
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Цитата:
Сообщение от Ивано Посмотреть сообщение
В общем с выше описанным ничего не выходит...
Нашел еще ссылку:

что это за способ кэширования?
http://buzz.typo3.org/people/steffen...in-extensions/
http://wiki.typo3.org/Functions_for_t3lib_cache
А что значит не выходит? Можете написать подробнее что вы сделали.
На вскидку:
1. Если у вас плагин типа USER, то содержимое закэшируется при первом обращении к нему и внутренняя логика уже не будет использоваться. В случае любой динамики обязательно должен быть USER_INT.
2. Может у вас отключено использование caching framework в настройках TYPO3. На сколько я помню по умолчанию он выключен.

По новым ссылкам.
cache_hash - таблица которая используется для внутреннего кэширования. Она и функции работы с ней существуют в ядре очень давно. Ее тоже можно использовать (пример в первой ссылке), но как по мне это не очень эффективно.
dmartynenko вне форума   Ответить с цитированием
Старый 02.07.2012, 00:26   #10
Ивано
Guest
 
Сообщений: n/a
Red face

Вот допусти стандартный класс, созданный через kickstarter:

PHP код:
require_once(PATH_tslib.'class.tslib_pibase.php');


/**
 * Plugin 'fwe' for the 'few' extension.
 *
 * @author    Иван <litovan@bk.ru>
 * @package    TYPO3
 * @subpackage    tx_few
 */
class tx_few_pi1 extends tslib_pibase {
    var 
$prefixId      'tx_few_pi1';        // Same as class name
    
var $scriptRelPath 'pi1/class.tx_few_pi1.php';    // Path to this script relative to the extension dir.
    
var $extKey        'few';    // The extension key.
    
var $pi_checkCHash true;
    
    
/**
     * The main method of the PlugIn
     *
     * @param    string        $content: The PlugIn content
     * @param    array        $conf: The PlugIn configuration
     * @return    The content that is displayed on the website
     */
    
function main($content$conf) {
        
$this->conf $conf;
        
$this->pi_setPiVarDefaults();
        
$this->pi_loadLL();
        
    
        
$content='
            <strong>This is a few paragraphs:</strong><br />
            <p>This is line 1</p>
            <p>This is line 2</p>
    
            <h3>This is a form:</h3>
            <form action="'
.$this->pi_getPageLink($GLOBALS['TSFE']->id).'" method="POST">
                <input type="text" name="'
.$this->prefixId.'[input_field]" value="'.htmlspecialchars($this->piVars['input_field']).'">
                <input type="submit" name="'
.$this->prefixId.'[submit_button]" value="'.htmlspecialchars($this->pi_getLL('submit_button_label')).'">
            </form>
            <br />
            <p>You can click here to '
.$this->pi_linkToPage('get to this page again',$GLOBALS['TSFE']->id).'</p>
        '
;
    
        return 
$this->pi_wrapInBaseClass($content);
    }
}



if (
defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/few/pi1/class.tx_few_pi1.php'])    {
    include_once(
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/few/pi1/class.tx_few_pi1.php']);

Как в нем использовать функции кэширования встроенные в ядро на основе таблиц из примера первой ссылки?
  Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 01:04.


Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot

Хостинг и техническая поддержка: TYPO3 Лаборатория