PDA

Просмотр полной версии : [TS/PHP] LOAD_REGISTER = переменная ? Пример выборки списка системных страниц.


Sergey M Nikitin
12.08.2008, 15:10
includeLibs.myFunc = path/to/your/func.php

page.1 = LOAD_REGISTER
page.1{
storage_pids.cObject = USER
storage_pids.cObject{
userFunc = user_func->getCurrentSysFolders
}
}

page.5 = TEXT
page.5.data = register:storage_pids

page.10 = TEXT
page.10.value = <br /><br />

page.15 = TEXT
page.15.dataWrap = <b>{register:storage_pids}</b>



class user_func{

/*

return all child pages with doktype=254, not hidden and not deleted

*/
function getCurrentSysFolders(){
global $TSFE;
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','pages','pid='.$TSFE->id.' AND doktype=254 AND deleted=0 AND hidden=0','','','');

$i = 0;
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)){
if($i > 0) $result .= ",";
$result .= $row['uid'];
$i++;
}
return $result;
}
}




Вывод данного сниппета при результате метода getCurrentSysFolders = "7,15,28"

Будет


7,15,28

7,15,28

Pavel Antonov
12.08.2008, 15:42
А зачем так сложно? По-моему, можно обойтись средствами TypoScript... Есть CONTENT.... table = pages никто не запрещает сделать.

Я не прав?

Sergey M Nikitin
12.08.2008, 15:46
Если внимательно посмотрите код (tslib/cObj), то увидите, что для таблиц page с doktype<200 выборка CONTENT'ом не производиться, у системных страниц doktype=254, отсюда и вся сложность.

Pavel Antonov
12.08.2008, 17:09
Если внимательно посмотрите код (tslib/cObj), то увидите, что для таблиц page с doktype<200 выборка CONTENT'ом не производиться, у системных страниц doktype=254, отсюда и вся сложность.

Зная SQL никто не запретит делать все что хочешь:
Следующий код выбирает ВСЕ подстраницы с pid 1.
И даже удаленные! (для пущего эффекта, "не повторяйте это дома")


5 = CONTENT
5 {
table = pages
select.uidInList = 1
select.pidInList = 0
select.leftjoin = pages as pp on pages.uid = pp.pid
select.selectFields = pp.*
renderObj = TEXT
renderObj.value = {field:title}({field:uid}) - {field:doktype}
renderObj.insertData = 1
renderObj.wrap = [|]<br />
}
Я думаю нет проблем сделать все что угодно на чистом TypoScript.

Ивано++
03.07.2013, 19:30
Очень помогло:

#************************************************* ******************
# Данный файл содержит описание настроек seo-материала для виртуальных страниц
#************************************************* ******************

# Определяем мета-данные для новостей (раздел 95)
[globalVar = GP:tt_content_news_view_detail_record > 0]

# Создаем новое значение
page.1 = LOAD_REGISTER

# Ключевые слова
page.1.new_keywords.cObject = TEXT
page.1.new_keywords.cObject.dataWrap = DB:tt_content_news:{GP:tt_content_news_view_detail _record}:seo_keywords
page.1.new_keywords.cObject.insertData = 1
page.1.new_keywords.cObject.wrap3 = {|}

# Описание страницы
page.1.new_description.cObject = TEXT
page.1.new_description.cObject.dataWrap = DB:tt_content_news:{GP:tt_content_news_view_detail _record}:seo_description
page.1.new_description.cObject.insertData = 1
page.1.new_description.cObject.wrap3 = {|}

# Заголовок
page.1.new_title.cObject = TEXT
page.1.new_title.cObject.dataWrap = DB:tt_content_news:{GP:tt_content_news_view_detail _record}:title
page.1.new_title.cObject.insertData = 1
page.1.new_title.cObject.wrap3 = {|}

# Переопределяем заголовок
page.headerData.100.value (

<meta name="keywords" content="{register:new_keywords // DB:tx_web_settings:1:seo_meta_def_keywords}">
<meta name="description" content="{register:new_description // DB:tx_web_settings:1:seo_meta_def_description}">
<title>{register:new_title //field:subtitle // field:title} :: {DB:tx_web_settings:1:site_name}</title>

)

[global]

# Значения по умолчанию (если все выше описанное оказалось пыстым)
#page.meta.keywords.ifEmpty.data = DB:tx_web_settings:1:seo_meta_def_keywords
#page.meta.description.ifEmpty.data = DB:tx_web_settings:1:seo_meta_def_description