Hooks (from development document)の和訳

TYPOlightの開発者向けドキュメントHooksの和訳です。独自で作成する機能拡張にフックを組み合わせることで、TYPOlightが実行するアクションへの割り込みが可能になります。設定ファイルで独自メソッドを呼び出すように設定するのでコアファイルを汚染することはありません。

 

ライセンスは、オリジナルに倣いますので表示-非営利-継承 3.0 Unportedです。

hookについて

フックによって、特定の順序に実行される特定のイベントで呼び出されるコールバック機能を登録することができます。ソースコードを修正せずに、カスタム機能をコアに加えることができます。(訳者注:実際にはこの文章は、開発者ドキュメントのインデックスにある紹介です)

利用可能なフック

  1. activateAccount
  2. addCustomRegexp
  3. checkCredentials
  4. createNewUser
  5. executePreActions
  6. executePostActions
  7. generateFrontendUrl
  8. getPageIdFromUrl
  9. getSearchablePages
  10. importUser
  11. loadFormField
  12. outputBackendTemplate
  13. outputFrontendTemplate
  14. parseBackendTemplate
  15. parseFrontendTemplate
  16. postDownload
  17. postLogin
  18. postLogout
  19. processFormData
  20. removeOldFeeds
  21. replaceInsertTags
  22. setNewPassword
  23. validateFormField

使用可能なフック

フックは、コア機能を広げるカスタム・コールバック機能を登録するのに用いられることができます。

あなたのTYPOlight拡張(config/config.php)の構成ファイルを開いて、以下のような行を加えてください:

<?php $GLOBALS['TL_HOOKS']['activateAccount'][] = array('User', 'activateAccount'); ?>

簡単な使用例と一緒に使用できるフックリストを次にあげます。

activateAccount

新しいフロントエンド・アカウントがアクティブにされるとき、activateAccountフックは引き起こされます。それは引数としてユーザーオブジェクトを渡し、戻り値を要求しません。バージョン2.4.3以上で利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['activateAccount'][] = array('MyClass', 'activateAccount');

// MyClass.php
public function activateAccount(Database_Result $objUser)
{
    // Do something
}
?>

addCustomRegexp

未知の正規表現が見つけ出されるとき、addCustomRegexpフックは引き起こされます。それは引数としてその未知の正規表現、現在の値とウィジェットオブジェクトの名前を渡して、ブールの戻り値を必要とします。バージョン2.6.2から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['addCustomRegexp'][] = array('MyClass', 'addCustomRegexp');

// MyClass.php
public function addCustomRegexp($strRegexp, $varValue, Widget $objWidget)
{
    if ($strRegexp == 'postal')
    {
        if (!preg_match('/^0-9{4,6}$/', $varValue))
        {
            $objWidget->addError('Field ' . $objWidget->label . ' should be a postal code.');
        }

        return true;
    }

    return false;
}
?>

checkCredentials

間違ったパスワードのためにログイン処理が失敗するとき、checkCredentialsフックは引き起こされます。それは引数としてユーザー名とパスワードを渡して、ブールの戻り値を必要とします。バージョン2.6.0から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['checkCredentials'][] = array('MyClass', 'checkCredentials');

// MyClass.php
public function checkCredentials($strUsername, $strPassword)
{
    // Check against a global database
    if ($this->checkGlobalDbFor($strUsername, $strPassword))
    {
        return true;
    }

    return false;
}
?>

createNewUser

新しいフロントエンド・ユーザーがウェブサイトで登録するとき、createNewUserフックは引き起こされます。それは引数として新しいユーザーとデータ配列のIDを渡して、戻り値を必要としません。バージョン2.2.0から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['createNewUser'][] = array('MyClass', 'createNewUser');

// MyClass.php
public function createNewUser($intId, $arrData)
{
    // Modify the record
}
?>

executePreActions

executePreActionsは、Ajaxリクエストによって引き起こされます。それは引数としてアクションの名前を渡して、戻り値を必要としません。バージョン2.6.1から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['executePreActions'][] = array('MyClass', 'executePreActions');

// MyClass.php
public function executePreActions($strAction)
{
    if ($strAction == 'update')
    {
        // Do something
    }
}
?>

executePostActions

executePostActionsは、Ajaxリクエストによって引き起こされます。それは引数としてアクションの名前とデータ・コンテナ・オブジェクトを渡して、戻り値を必要としません。バージョン2.6.1から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['executePostActions'][] = array('MyClass', 'executePostActions');

// MyClass.php
public function executePostActions($strAction, DataContainer $dc)
{
    if ($strAction == 'update')
    {
        // Do something
    }
}
?>

generateFrontendUrl

generateFrontendUrlフックは、フロントエンドURLがつくられているとき引き起こされます。それは引数としてページ・オブジェクト、パラメータ文字列とデフォルトURLを渡して、戻り値としてストリングを必要とします。バージョン2.5.8から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['generateFrontendUrl'][] = array('MyClass', 'generateFrontendUrl');

// MyClass.php
public function generateFrontendUrl(Database_Result $objPage, $strParams, $strUrl)
{
    return str_replace('.html', '.xml', $strUrl);
}
?>

getPageIdFromUrl

getPageIdFromUrlフックは、URLフラグメントが評価されているとき引き起こされます。それは引数としてURLフラグメントの配列を渡して、戻り値としてURLフラグメントの配列を必要としますバージョン2.5.4から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['getPageIdFromUrl'][] = array('MyClass', 'getPageIdFromUrl');

// MyClass.php
public function getPageIdFromUrl($arrFragments)
{
    return array_unique($arrFragments);
}
?>

getSearchablePages

検索インデックスが作り直されるとき、getSearchablePagesフックは引き起こされます。それは引数としてページの配列とルート・ページのIDを渡して、戻り値として、ページの配列を必要とします。(ページの配列の要素はページに対する絶対URLです!)バージョン2.2.0から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['getSearchablePages'][] = array('MyClass', 'getSearchablePages');

// MyClass.php
public function getSearchablePages($arrPages, $intRoot)
{
    return array_merge($arrPages, array('Additional pages'));
}
?>

importUser

ユーザー名がデータベースで見つけ出されないとき、importUserフックは引き起こされます。それは引数としてユーザー名、パスワードとテーブル名を渡して、ブールの戻り値を必要とします。バージョン2.6.3から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['importUser'][] = array('MyClass', 'importUser');

// MyClass.php
public function importUser($strUsername, $strPassword, $strTable)
{
    if ($strTable == 'tl_member')
    {
        // Import user from an LDAP server
        if ($this->importUserFromLdap($strUsername, $strPassword))
        {
            return true;
        }
    }

    return false;
}
?>

loadFormField

フォーム・フィールドがロードされるとき、loadFormFieldフックは引き起こされます。それは引数としてウィジェットとフォームIDを渡して、戻り値としてウィジェットを待っています。バージョン2.5.0から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['loadFormField'][] = array('MyClass', 'loadFormField');

// MyClass.php
public function loadFormField(Widget $objWidget, $intForm)
{
    $objWidget->class = 'myclass';
    return $objWidget;
}
?>

outputBackendTemplate

バックエンド・テンプレートが画面に出力されるとき、outputBackendTemplateなフックは引き起こされます。それは引数としてテンプレート・コンテンツとテンプレート名を渡して、戻り値としてテンプレート・コンテンツを必要とします。バージョン2.6.0から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['outputBackendTemplate'][] = array('MyClass', 'outputBackendTemplate');

// MyClass.php
public function outputBackendTemplate($strContent, $strTemplate)
{
    if ($strTemplate == 'be_main')
    {
        // Modify output
    }

    return $strContent;
}
?>

outputFrontendTemplate

フロントエンド・テンプレートが画面に出力されるとき、outputFrontendTemplateなフックは引き起こされます。それは引数としてテンプレート・コンテンツとテンプレート名を渡して、戻り値としてテンプレート・コンテンツを必要とします。バージョン2.6.0から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['outputFrontendTemplate'][] = array('MyClass', 'outputFrontendTemplate');

// MyClass.php
public function outputFrontendTemplate($strContent, $strTemplate)
{
    if ($strTemplate == 'fe_page')
    {
        // Modify output
    }

    return $strContent;
}
?>

parseBackendTemplate

バックエンド・テンプレートがパースされるとき、parseBackendTemplateなフックは引き起こされます。それは引数としてテンプレート・コンテンツとテンプレート名を渡して、戻り値としてテンプレート・コンテンツを必要とします。バージョン2.6.0から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['parseBackendTemplate'][] = array('MyClass', 'parseBackendTemplate');

// MyClass.php
public function parseBackendTemplate($strContent, $strTemplate)
{
    if ($strTemplate == 'be_main')
    {
        // Modify output
    }

    return $strContent;
}
?>

parseFrontendTemplate

フロント・エンドテンプレートがパースされるとき、parseFrontendTemplateなフックは引き起こされます。それは引数としてテンプレート・コンテンツとテンプレート名を渡して、戻り値としてテンプレート・コンテンツを必要とします。バージョン2.6.0から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['parseFrontendTemplate'][] = array('MyClass', 'parseFrontendTemplate');

// MyClass.php
public function parseFrontendTemplate($strContent, $strTemplate)
{
    if ($strTemplate == 'ce_text')
    {
        // Modify output
    }

    return $strContent;
}
?>

postDownload

ファイルがダウンロードされたあと、postDownloadフックは引き起こされます。それは引数としてファイル名を渡して、戻り値は不要です。バージョン2.4.6から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['postDownload'][] = array('MyClass', 'postDownload');

// MyClass.php
public function postDownload($strFile)
{
    // Do something
}
?>

postLogin

ユーザーがフロントエンドにログインしたあと、postLoginフックは引き起こされます。それは引数としてユーザーオブジェクトを渡して、戻り値を必要としません。バージョン2.4.3から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['postLogin'][] = array('MyClass', 'postLogin');

// MyClass.php
public function postLogin(Database_Result $objUser)
{
    // Do something
}
?>

postLogout

ユーザーがフロント・エンドからログアウトしたあと、postLogoutフックは引き起こされます。それは引数としてユーザーオブジェクトを渡して、戻り値を必要としません。バージョン2.4.3から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['postLogout'][] = array('MyClass', 'postLogout');

// MyClass.php
public function postLogout(Database_Result $objUser)
{
    // Do something
}
?>

processFormData

フォームが提出されたあと、processFormDataフックは引き起こされます。それは引数としてフォーム・データ配列、テーブル構成配列とファイル配列を渡して、戻り値を必要としません。バージョン2.4.4から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['processFormData'][] = array('MyClass', 'processFormData');

// MyClass.php
public function processFormData($arrPost, $arrForm, $arrFiles)
{
    // Do something
}
?>

removeOldFeeds

古いXMLファイルが削除されるとき、removeOldFeedsフックは引き起こされます。それは引数はなく、戻り値として配列のファイル名を必要とします。バージョン2.5.8から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['removeOldFeeds'][] = array('MyClass', 'removeOldFeeds');

// MyClass.php
public function removeOldFeeds()
{
    return array('custom.xml');
}
?>

replaceInsertTags

未知の挿入タグが見つけ出されるとき、replaceInsertTagsフックは引き起こされます。それは引数として挿入タグを渡して、戻り値として置き換え値またはfalseを必要とします。バージョン2.6.0から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('MyClass', 'replaceInsertTags');

// MyClass.php
public function replaceInsertTags($strTag)
{
    if ($strTag == 'mytag')
    {
        return 'mytag replacement';
    }

    return false;
}
?>

setNewPassword

新しいパスワードが指定されたあと、setNewPasswordフックは引き起こされます。それは引数としてユーザーオブジェクトと暗号化パスワードを渡して、戻り値を必要としません。それは、バージョン2.2.3から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['setNewPassword'][] = array('MyClass', 'setNewPassword');

// MyClass.php
public function setNewPassword(User $objUser, $strPassword)
{
    // Do something
}
?>

validateFormField

フォーム・フィールドが提出されるとき、validateFormFieldフックは引き起こされます。それは引数としてウィジェットとフォームIDを渡して、戻り値としてウィジェットを必要とします。バージョン2.5.0から利用できます。

<?php
// config.php
$GLOBALS['TL_HOOKS']['validateFormField'][] = array('MyClass', 'validateFormField');

// MyClass.php
public function validateFormField(Widget $objWidget, $intId)
{
    if ($objWidget instanceof FormPassword)
    {
        // Do something
    }

    return $objWidget;
}
?>