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

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Общие вопросы

Ответ
 
Опции темы Опции просмотра
Старый 25.07.2006, 12:49   #1
Tod
Senior Member
 
Аватар для Tod
 
Регистрация: 25.03.2006
Сообщений: 627
Отправить сообщение для Tod с помощью ICQ
По умолчанию TV, Link field

Если создавать в TV элемент контента, то потом через TypoScript Object path можно на него сослаться - как содержимое таблицы tt_content...
А я хочу сделать подобное но с элементом Link Field, чтобы не прописывать его на каждой странице... к какой таблице обратиться?
---
И еще один вопрос. Или скорее замечание. Я задаю на корневой странице шаблон для подстраниц сайта. Все четко, а потом после добаления новой подстраницы захожу через модуль Web-TV-Page и там где должны отображаться элементы контента - их нет)) только после установки новой подстраницы непосредственно нужного шаблона, эти элементы виднЫ))
__________________
Персональный блог про заработок в интернете + полезных блога про typo3 и wordpress
Tod вне форума   Ответить с цитированием
Старый 25.07.2006, 15:52   #2
Дмитрий Самойлов
Продвинутый
 
Регистрация: 28.03.2005
Сообщений: 78
Отправить сообщение для Дмитрий Самойлов с помощью ICQ Отправить сообщение для Дмитрий Самойлов с помощью Skype™
По умолчанию ошибка в темплаволе

Цитата:
Сообщение от Tod
...
И еще один вопрос. Или скорее замечание. Я задаю на корневой странице шаблон для подстраниц сайта. Все четко, а потом после добаления новой подстраницы захожу через модуль Web-TV-Page и там где должны отображаться элементы контента - их нет)) только после установки новой подстраницы непосредственно нужного шаблона, эти элементы виднЫ))
Это ошибка в темлаволе - нужно исправить в файле typo3conf\ext\templavoila\mod1\class.tx_templavoil a_mod1_wizards.php метод renderTemplateSelector

Вот правильный код
Цитата:
function renderTemplateSelector ($positionPid, $templateType='tmplobj') {
global $LANG, $TYPO3_DB;

$storageFolderPID = $this->apiObj->getStorageFolderPid($positionPid);
$tmplHTML = array();

switch ($templateType) {
case 'tmplobj':
// Create the "Default template" entry
$previewIconFilename = $GLOBALS['BACK_PATH'].'../'.t3lib_extMgm::siteRelPath($this->extKey).'res1/default_previewicon.gif';
$previewIcon = '<input type="image" class="c-inputButton" src="'.$previewIconFilename.'" title="" />';
$description = htmlspecialchars($LANG->getLL ('template_descriptiondefault'));
$tmplHTML [] = '<table style="float:left; width: 100%;" valign="top"><tr><td colspan="2" nowrap="nowrap">
<h3 class="bgColor3-20">'.htmlspecialchars($LANG->getLL ('template_titledefault')).'</h3></td></tr>
<tr><td valign="top">'.$previewIcon.'</td><td width="120" valign="top"><p>'.$description.'</p></td></tr></table>';

$tTO = 'tx_templavoila_tmplobj';
$tDS = 'tx_templavoila_datastructure';
$res = $TYPO3_DB->exec_SELECTquery (
"$tTO.*",
"$tTO LEFT JOIN $tDS ON $tTO.datastructure = $tDS.uid",
"$tTO.pid=".intval($storageFolderPID)." AND $tDS.scope=1".
t3lib_befunc::deleteClause ($tTO).t3lib_befunc::deleteClause ($tDS).
t3lib_BEfunc::versioningPlaceholderClause($tTO).t3 lib_BEfunc::versioningPlaceholderClause($tDS)
);

while (false !== ($row = $TYPO3_DB->sql_fetch_assoc($res))) {
// Check if preview icon exists, otherwise use default icon:
$tmpFilename = 'uploads/tx_templavoila/'.$row['previewicon'];
$previewIconFilename = (@is_file(PATH_site.$tmpFilename)) ? ($GLOBALS['BACK_PATH'].'../'.$tmpFilename) : ($GLOBALS['BACK_PATH'].'../'.t3lib_extMgm::siteRelPath($this->extKey).'res1/default_previewicon.gif');
$previewIcon = '<input type="image" class="c-inputButton" onclick="document.getElementById(\'datum\').value= '.$row['uid'].';" src="'.$previewIconFilename.'" title="" />';
$description = $row['description'] ? htmlspecialchars($row['description']) : $LANG->getLL ('template_nodescriptionavailable');
$tmplHTML [] = '<table style="width: 100%;" valign="top"><tr><td colspan="2" nowrap="nowrap"><h3 class="bgColor3-20">'.htmlspecialchars($row['title']).'</h3></td></tr>'.
'<tr><td valign="top">'.$previewIcon.'</td><td width="120" valign="top"><p>'.$description.'</p></td></tr></table>';
}
$tmplHTML [] = '<input type="hidden" value="0" name="data[tx_templavoila_to]" id="datum">';
break;

case 't3d':
if (t3lib_extMgm::isLoaded('impexp')) {

// Read template files from a certain folder. I suggest this is configurable in some way. But here it is hardcoded for initial tests.
$templateFolder = PATH_site.'fileadmin/export/templates/';
$files = t3lib_div::getFilesInDir($templateFolder,'t3d,xml' ,1,1);

// Traverse the files found:
foreach($files as $absPath) {
// Initialize the import object:
$import = $this->getImportObject();
if ($import->loadFile($absPath)) {
if (is_array($import->dat['header']['pagetree'])) { // This means there are pages in the file, we like that...:

// Page tree:
reset($import->dat['header']['pagetree']);
$pageTree = current($import->dat['header']['pagetree']);


// Thumbnail icon:
if (is_array($import->dat['header']['thumbnail'])) {
$pI = pathinfo($import->dat['header']['thumbnail']['filename']);
if (t3lib_div::inList('gif,jpg,png,jpeg',strtolower($ pI['extension']))) {

// Construct filename and write it:
$fileName = PATH_site.
'typo3temp/importthumb_'.t3lib_div::shortMD5($absPath).'.'.$p I['extension'];
t3lib_div::writeFile($fileName, $import->dat['header']['thumbnail']['content']);

// Check that the image really is an image and not a malicious PHP script...
if (getimagesize($fileName)) {
// Create icon tag:
$iconTag = '<img src="'.$this->doc->backPath.'../'.substr($fileName,strlen(PATH_site)).'" '.$import->dat['header']['thumbnail']['imgInfo'][3].' vspace="5" style="border: solid black 1px;" alt="" />';
} else {
t3lib_div::unlink_tempfile($fileName);
$iconTag = '';
}
}
}

$aTagB = '<a href="'.htmlspecialchars(t3lib_div::linkThisScript (array('templateFile' => $absPath))).'">';
$aTagE = '</a>';
$tmplHTML [] = '<table style="float:left; width: 100%;" valign="top"><tr><td colspan="2" nowrap="nowrap">
<h3 class="bgColor3-20">'.$aTagB.htmlspecialchars($import->dat['header']['meta']['title'] ? $import->dat['header']['meta']['title'] : basename($absPath)).$aTagE.'</h3></td></tr>
<tr><td valign="top">'.$aTagB.$iconTag.$aTagE.'</td><td valign="top"><p>'.htmlspecialchars($import->dat['header']['meta']['description']).'</p>
<em>Levels: '.(count($pageTree)>1 ? 'Deep structure' : 'Single page').'<br/>
File: '.basename($absPath).'</em></td></tr></table>';

}
}
}
}
break;

}

if (is_array($tmplHTML) && count($tmplHTML)) {
$counter = 0;
$content .= '<table>';
foreach ($tmplHTML as $single) {
$content .= ($counter ? '':'<tr>').'<td valign="top">'.$single.'</td>'.($counter ? '</tr>':'');
$counter ++;
if ($counter > 1) { $counter = 0; }
}
$content .= '</table>';
}

return $content;
}

Последний раз редактировалось Дмитрий Самойлов; 25.07.2006 в 15:54
Дмитрий Самойлов вне форума   Ответить с цитированием
Старый 27.07.2006, 13:16   #3
Tod
Senior Member
 
Аватар для Tod
 
Регистрация: 25.03.2006
Сообщений: 627
Отправить сообщение для Tod с помощью ICQ
По умолчанию

код выше содержит парочку лишних пробелов где-то в строках 264, 301, 305... типо3 матюкается по поводу этих вещей, нужно поисправлять... а так решение работает. Спасибо))
-----
PS.Если бы еще кто-то прошарил тему по поводу Link fields)
__________________
Персональный блог про заработок в интернете + полезных блога про typo3 и wordpress

Последний раз редактировалось Tod; 27.07.2006 в 13:20
Tod вне форума   Ответить с цитированием
Старый 27.07.2006, 23:45   #4
Pavel Antonov
Senior Member
 
Аватар для Pavel Antonov
 
Регистрация: 01.10.2004
Адрес: Россия, Москва
Сообщений: 1,204
Отправить сообщение для Pavel Antonov с помощью ICQ
По умолчанию

Цитата:
Сообщение от Tod
PS.Если бы еще кто-то прошарил тему по поводу Link fields)
Честно говоря, я не понял что нужно.

Если нужно сделать ссылку в TV я делаю обычно так:

Допустим нужна ссылка на корень сайта.
1) В TV мепится переменная TS (lib.homelink) на аттрибут href нужного тэга <a>
2) В TS:
Код:
lib.homelink = TEXT
lib.homelink.typolink {
  parameter.data = leveluid: 0
  returnLast = url
}
__________________
Павел Антонов
Rich Media Development Ltd.
Блог: http://codeline.richmd.ru/
Pavel Antonov вне форума   Ответить с цитированием
Старый 28.07.2006, 00:52   #5
Tod
Senior Member
 
Аватар для Tod
 
Регистрация: 25.03.2006
Сообщений: 627
Отправить сообщение для Tod с помощью ICQ
По умолчанию

Есть в TV такой тип элемента (Editing Type) как Link field. Так вот допустим на какой-то странице я использую шаблон с таким вот элементом, задаю там ссылку... и могу ли я через TS Object path определенный lib.getlinkfield достать ту ссылку?
(по аналогии с тем, как я могу обратиться к какому-то элементку контента через RECORDS таблицы tt_content)
__________________
Персональный блог про заработок в интернете + полезных блога про typo3 и wordpress
Tod вне форума   Ответить с цитированием
Старый 28.07.2006, 11:25   #6
Pavel Antonov
Senior Member
 
Аватар для Pavel Antonov
 
Регистрация: 01.10.2004
Адрес: Россия, Москва
Сообщений: 1,204
Отправить сообщение для Pavel Antonov с помощью ICQ
По умолчанию

Цитата:
Сообщение от Tod
Есть в TV такой тип элемента (Editing Type) как Link field. Так вот допустим на какой-то странице я использую шаблон с таким вот элементом, задаю там ссылку... и могу ли я через TS Object path определенный lib.getlinkfield достать ту ссылку?
(по аналогии с тем, как я могу обратиться к какому-то элементку контента через RECORDS таблицы tt_content)
Явно нарушена причинно следственная связь...

Да можете, через название которое определили при задании TV шаблона.
При чем тут RECORDS совершенно не понимаю. Ссылка в данном случае Flex Field... такой таблицы или поля в таблице не существует.
__________________
Павел Антонов
Rich Media Development Ltd.
Блог: http://codeline.richmd.ru/
Pavel Antonov вне форума   Ответить с цитированием
Старый 02.08.2006, 10:19   #7
salah
Продвинутый
 
Аватар для salah
 
Регистрация: 18.01.2006
Адрес: Москва
Сообщений: 88
По умолчанию

Поправленный код уважаемого Дмитрия Самойлова.
Код:
function renderTemplateSelector ($positionPid, $templateType='tmplobj') {
global $LANG, $TYPO3_DB;

$storageFolderPID = $this->apiObj->getStorageFolderPid($positionPid);
$tmplHTML = array();

switch ($templateType) {
case 'tmplobj':
// Create the "Default template" entry
$previewIconFilename = $GLOBALS['BACK_PATH'].'../'.t3lib_extMgm::siteRelPath($this->extKey).'res1/default_previewicon.gif';
$previewIcon = '<input type="image" class="c-inputButton" src="'.$previewIconFilename.'" title="" />';
$description = htmlspecialchars($LANG->getLL ('template_descriptiondefault'));
$tmplHTML [] = '<table style="float:left; width: 100%;" valign="top"><tr><td colspan="2" nowrap="nowrap">
<h3 class="bgColor3-20">'.htmlspecialchars($LANG->getLL ('template_titledefault')).'</h3></td></tr>
<tr><td valign="top">'.$previewIcon.'</td><td width="120" valign="top"><p>'.$description.'</p></td></tr></table>';

$tTO = 'tx_templavoila_tmplobj';
$tDS = 'tx_templavoila_datastructure';
$res = $TYPO3_DB->exec_SELECTquery (
"$tTO.*",
"$tTO LEFT JOIN $tDS ON $tTO.datastructure = $tDS.uid",
"$tTO.pid=".intval($storageFolderPID)." AND $tDS.scope=1".
t3lib_befunc::deleteClause ($tTO).t3lib_befunc::deleteClause ($tDS).
t3lib_BEfunc::versioningPlaceholderClause($tTO).
t3lib_BEfunc::versioningPlaceholderClause($tDS));

while (false !== ($row = $TYPO3_DB->sql_fetch_assoc($res))) {
// Check if preview icon exists, otherwise use default icon:
$tmpFilename = 'uploads/tx_templavoila/'.$row['previewicon'];
$previewIconFilename = (@is_file(PATH_site.$tmpFilename)) ? ($GLOBALS['BACK_PATH'].'../'.$tmpFilename) : ($GLOBALS['BACK_PATH'].'../'.t3lib_extMgm::siteRelPath($this->extKey).'res1/default_previewicon.gif');
$previewIcon = '<input type="image" class="c-inputButton" onclick="document.getElementById(\'datum\').value= '.$row['uid'].';" src="'.$previewIconFilename.'" title="" />';
$description = $row['description'] ? htmlspecialchars($row['description']) : $LANG->getLL ('template_nodescriptionavailable');
$tmplHTML [] = '<table style="width: 100%;" valign="top"><tr><td colspan="2" nowrap="nowrap"><h3 class="bgColor3-20">'.htmlspecialchars($row['title']).'</h3></td></tr>'.
'<tr><td valign="top">'.$previewIcon.'</td><td width="120" valign="top"><p>'.$description.'</p></td></tr></table>';
}
$tmplHTML [] = '<input type="hidden" value="0" name="data[tx_templavoila_to]" id="datum">';
break;

case 't3d':
if (t3lib_extMgm::isLoaded('impexp')) {

// Read template files from a certain folder. I suggest this is configurable in some way. But here it is hardcoded for initial tests.
$templateFolder = PATH_site.'fileadmin/export/templates/';
$files = t3lib_div::getFilesInDir($templateFolder,'t3d,xml' ,1,1);

// Traverse the files found:
foreach($files as $absPath) {
// Initialize the import object:
$import = $this->getImportObject();
if ($import->loadFile($absPath)) {
if (is_array($import->dat['header']['pagetree'])) { // This means there are pages in the file, we like that...:

// Page tree:
reset($import->dat['header']['pagetree']);
$pageTree = current($import->dat['header']['pagetree']);


// Thumbnail icon:
if (is_array($import->dat['header']['thumbnail'])) {
$pI = pathinfo($import->dat['header']['thumbnail']['filename']);
if (t3lib_div::inList('gif,jpg,png,jpeg',strtolower($pI['extension']))) {

// Construct filename and write it:
$fileName = PATH_site.
'typo3temp/importthumb_'.t3lib_div::shortMD5($absPath).'.'.$pI['extension'];
t3lib_div::writeFile($fileName, $import->dat['header']['thumbnail']['content']);

// Check that the image really is an image and not a malicious PHP script...
if (getimagesize($fileName)) {
// Create icon tag:
$iconTag = '<img src="'.$this->doc->backPath.'../'.substr($fileName,strlen(PATH_site)).'" '.$import->dat['header']['thumbnail']['imgInfo'][3].' vspace="5" style="border: solid black 1px;" alt="" />';
} else {
t3lib_div::unlink_tempfile($fileName);
$iconTag = '';
}
}
}

$aTagB = '<a href="'.htmlspecialchars(t3lib_div::linkThisScript (array('templateFile' => $absPath))).'">';
$aTagE = '</a>';
$tmplHTML [] = '<table style="float:left; width: 100%;" valign="top"><tr><td colspan="2" nowrap="nowrap">
<h3 class="bgColor3-20">'.$aTagB.htmlspecialchars($import->dat['header']['meta']['title'] ? $import->dat['header']['meta']['title'] : basename($absPath)).$aTagE.'</h3></td></tr>
<tr><td valign="top">'.$aTagB.$iconTag.$aTagE.'</td><td valign="top"><p>'.htmlspecialchars($import->dat['header']['meta']['description']).'</p>
<em>Levels: '.(count($pageTree)>1 ? 'Deep structure' : 'Single page').'<br/>
File: '.basename($absPath).'</em></td></tr></table>';

}
}
}
}
break;

}

if (is_array($tmplHTML) && count($tmplHTML)) {
$counter = 0;
$content .= '<table>';
foreach ($tmplHTML as $single) {
$content .= ($counter ? '':'<tr>').'<td valign="top">'.$single.'</td>'.($counter ? '</tr>':'');
$counter ++;
if ($counter > 1) { $counter = 0; }
}
$content .= '</table>';
}

return $content;
}
__________________
Константин,
Вольный каменщик
salah вне форума   Ответить с цитированием
Старый 20.11.2006, 19:00   #8
Tod
Senior Member
 
Аватар для Tod
 
Регистрация: 25.03.2006
Сообщений: 627
Отправить сообщение для Tod с помощью ICQ
По умолчанию

Цитата:
Сообщение от Pavel Antonov Посмотреть сообщение
Допустим нужна ссылка на корень сайта.
1) В TV мепится переменная TS (lib.homelink) на аттрибут href нужного тэга <a>
2) В TS:
Код:
lib.homelink = TEXT
lib.homelink.typolink {
  parameter.data = leveluid: 0
  returnLast = url
}
Странно, но почему-то в TV 1.1.1 это не работает... или это только у меня? просьба уточнить у кого пашет.
---
зы. Pavel Antonov, раз можно обратиться через назавние в TV шаблоне, то каким образом? поподробнее, если можно))
зы2. Если я поверху TV 1.1.1 поставлю TV 1.1.0, то все шаблоны нужно будет делать заново? или нет?)
__________________
Персональный блог про заработок в интернете + полезных блога про typo3 и wordpress

Последний раз редактировалось Tod; 20.11.2006 в 19:36
Tod вне форума   Ответить с цитированием
Старый 20.11.2006, 23:14   #9
Tod
Senior Member
 
Аватар для Tod
 
Регистрация: 25.03.2006
Сообщений: 627
Отправить сообщение для Tod с помощью ICQ
По умолчанию

1. Все прекрасно работает. Всему виной невнимательность((
2. Поставил TV 1.1.0 поверху TV 1.1.1, все было нормально, но поскольку ошибка была не в этом, все вернул обратно.
- Остается вопрос с обращением в TS к полю Link field определенному в шаблоне.
__________________
Персональный блог про заработок в интернете + полезных блога про typo3 и wordpress
Tod вне форума   Ответить с цитированием
Старый 21.11.2006, 00:40   #10
void
Senior Member
 
Аватар для void
 
Регистрация: 14.03.2006
Адрес: Russia, Penza
Сообщений: 1,504
Отправить сообщение для void с помощью ICQ
По умолчанию

Что такое собственно link field? это часть xml-записи в таблице tt_content.
Соответственно, чтобы его вытащить, надо выбрать нужные записи через RECORDS или CONTENT, а затем из полученного xml вытянуть то, что нужно, с помощью дополнительной обработки в userFunc.
ЗЫ. или я не прав?)
__________________
TYPO3 FAQ
void вне форума   Ответить с цитированием
Ответ


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

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

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


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


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

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