Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   Подключение собственных скриптов (http://forum.typo3.ru/showthread.php?t=4303)

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 код:

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

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

config.includeLibrary = fileadmin/scripts/include.inc
Содержимое last_arts.inc:
PHP код:

<?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 код:

<?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

Цитата:

Сообщение от Fearless Goblin (Сообщение 14271)
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 код:

<?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);
        }
    }
?>

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


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

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