Вход

Просмотр полной версии : Подключение собственных скриптов


Fearless Goblin
15.08.2007, 22:26
Доброго времени суток.
К шаблону сайта подключаю собственный скрипт, который делает выборку из базы данных ТАЙПО и возвращает нужный результат в переменную $content. Скрипт работет, как положено, но после его подключения перестаёт отображаться контент страницы. И styles.content.get, и styles.content.getLeft, и styles.content.getRight ничего не содержат. Что-то вроде DB:tt_content:3:bodytext тоже ничего не даёт. Если скрипт отключить, то всё работает, как нужно.
Может это из-за того, что результат работы функции из скрипта пишется в $content?
И ещё одно: для выборки из базы использую mysql_connect(), что, естественно занимает некоторое время на подключение к базе. Есть ли в ТАЙПО какая-то общедоступная переменная, в которой хранится результат работы этой функции (ТАЙПО же сам как-то связывается с базой)?

Буду признателен ответившим.

void
16.08.2007, 01:13
В тайпе есть переменная $GLOBALS['TYPO3_DB'].

Каким образом скрипт-то подключаете?

Dutchak Vitaly
16.08.2007, 01:23
а кусок кода где в контент пишет можно?

Fearless Goblin
16.08.2007, 01:48
Итак, есть файл include.inc:

<?php
include("fileadmin/scripts/last_arts.inc");
?>

В шаблоне написано:

config.includeLibrary = fileadmin/scripts/include.inc

Содержимое last_arts.inc:

<?php
class last_arts
{
function getArts()
{
$link = mysql_connect("host", "login", "password")
or die("Could not connect: " . mysql_error());

mysql_select_db("typo3_database", $link);

$query = "SELECT uid, crdate, title, page FROM tt_news INNER JOIN tt_news_cat_mm ON tt_news.uid = tt_news_cat_mm.uid_local WHERE uid_foreign = 35 ORDER BY crdate DESC";
$dbResult = mysql_query($query, $link);
mysql_close($link);

$topics = "";
for($i=0; $i<6; $i++)
{
$row = mysql_fetch_row($dbResult);
$topic = $row[2];

$topics = $topics . "<a href=\"http://www.my.site/index.php?id=" . $row[3] . "\">" . $topic . "...</a><br>\n";
}

return($topics);
}
}
?>

Метод getArts() вытаскивает из базы заголовки новостей категории №35 (в этой категории создаются только новости, которые являются ссылками на внутренние страницы).

Файл arts_headers.inc:

<?php
$last_arts_obj = new last_arts();
$content = $last_arts_obj->getArts();
?>

В шаблоне:

temp.arts_headers = PHP_SCRIPT
temp.arts_headers.file = fileadmin/scripts/arts_headers.inc
...
temp.mainTemplate.subparts.arts_headers < temp.arts_headers
...
page.10 < temp.mainTemplate


Пример использования скриптов брал из TSref.

Fearless Goblin
16.08.2007, 02:00
void, а как с этой переменной работать? Или где почитать о ней можно?
Обычное присваивание в моём коде: $link = $GLOBALS['TYPO3_DB'] ничего не даёт. Или к ней надо как-то по-особому достучаться?

pavel_p
16.08.2007, 07:23
void, а как с этой переменной работать? Или где почитать о ней можно?
Обычное присваивание в моём коде: $link = $GLOBALS['TYPO3_DB'] ничего не даёт. Или к ней надо как-то по-особому достучаться?

$GLOBALS['TYPO3_DB'] - это не ресурс это обьект класса который позволяет абстрагироваться от конкретной база данных. оно имеет следующие методы

exec_SELECTquery(какие поля, из каких таблиц, фильтр, группировки, порядок сортировки)

exec_UPDATEquery(таблица, ассоциативный массив - ключ это поле, значение - это значение поля)

ну и так далее

для документации необходимо заглянуть в TYPO3 Core API в раздел General Functions который нужно проштудировать программистам по PHP чтоб понимать что как делается в типо не при помощи стандартных ф-ций ПХП

Fearless Goblin
16.08.2007, 14:04
pavel_p, спасибо большое за совет.

Fearless Goblin
16.08.2007, 15:14
Всё работает, как нужно! :)
Оказывается проблема, действительно, была в том, что использовались функции PHP, вроде mysql_connect().
Изменил вышеуказанный код на:

<?php
class last_arts
{
function getArts()
{
$dbResult = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'uid, crdate, title, page, uid_local, uid_foreign',
'tt_news, tt_news_cat_mm',
'tt_news.uid = tt_news_cat_mm.uid_local AND uid_foreign = 35',
'',
'crdate DESC');

$topics = "";
for($i=0; $i<6; $i++)
{
$row = mysql_fetch_row($dbResult);
$topic = $row[2];

$topics = $topics . "<a href=\"http://www.my.site/index.php?id=" . $row[3] . "\">" . $topic . "...</a><br>\n";
}

$GLOBALS['TYPO3_DB']->sql_free_result($dbResult);
return($topics);
}
}
?>

Огромное спасибо всем за помощь! :)