2

それで、私は完成すれば世界平和をもたらし、世界の飢餓を解決するこの素晴らしい Joomla コンポーネントを手に入れました。私がしなければならないのは、jquery .ajax 呼び出しを介して呼び出されるコードを組み込むことだけです。私は現在、AJAX呼び出しがそれらに到達できるように外部の場所にそれらを持っていますが、それらをJoomlaコンポーネント構造に正しく配置する方法が明確ではありません.

私は調査を行いました、私を信じてください、しかし、「あなたはこれを試すことができるか、それを試すことができるか」についての多くの議論しか見つけられませんでした. おそらく、Joomla は mootools に依存しているため、Jquery は一般的に議論されていませんが、社内にこの jQuery ルーチンの優れたライブラリがあり、正しい方法で活用したいと考えています。

呼び出しごとにビューを作成する必要があるように思えますが、これは、それを達成するために多くの不要な作業/オーバーヘッドのように思えます。(パイロットに乗客と一緒にフライトにチェックインするように依頼するようなものです)。また、それほど難しいことではないように思われるので、何が欠けているのか、またはなぜ明確な答えがないように見えるのかについて混乱しています.

ソリューションで更新 Soren からの回答は、質問に直接回答するため受け入れられましたが、Joomla 1.5 を指定していませんでしたが、彼の回答をすぐに機能させることができました。

ただし、Greg P に敬意を表して言及します。彼の回答は、私が抱えている他のプロジェクトや課題に対する迅速な解決策として、私が考えていなかった他の可能性の世界を切り開いてくれました。

これは、AJAXを使用してコンポーネントからコンポーネントに正常に呼び出すことができたURLと、それを機能させるために追加しものです。

index.php?option=com_mycomponent&format=raw&controller=ajax.raw&task=myfunction

components\com_mycomponent\controllers\ajaxraw.php

<?php
    defined('_JEXEC') or die( 'Restricted access' );
    jimport('joomla.application.component.controller');
    class MycomponentControllerAjaxraw extends JController
    {
        function myfunction()
        {
            echo json_encode("SomethingOrOther");
        }
    }
?>
4

2 に答える 2

6

Ajax呼び出しを行う必要があります

index.php?option=com_yourcomponent&task=ajax.function_name&format=raw

次に、ajax.raw.php という名前の新しいコントローラーを作成する必要があります。その中に、URL の「function_name」と一致する名前の関数を記述し、URL の呼び出し時に実行されます。

それらの中から、モデルを使用できます $this->getModel(); 必要に応じてビューなどを作成したり、怠惰になってロジックをコントローラーに直接配置したりできます。

コンポーネントがない場合は、Joomla Component Creatorを試してみてください

于 2012-05-31T12:26:05.097 に答える
1

これが「公式の」方法であるかどうかはわかりませんが、私にとっては確かにクリーンで迅速です。コンポーネントフォルダー内の単一のファイルにコアJoomlaファイルを含め、そのコアをjQuery呼び出しに使用します。テンプレート、MVC、またはCMSのオーバーヘッドはありません。Joomla 1.5の場合、必要なファイルは2つだけです。joomla_platform.phpはJoomlaのindex.phpに基づいてJoomlaの内臓をロードし、もう1つはそれを使用してjQueryに何かを返します。http://api.joomla.orgのドキュメントを参照してください。

From index.php
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

編集:これは私がそれを行う方法の骨抜きバージョンです:

でも警告の言葉は正しいと思います。私はこれを内部で使用しているので、心配する必要はありませんが、構成を返す例は、構成を取得する方法を示すためだけのものであり、この出力例を一般的に使用することはできません。ここでのチェックインにより、管理者ユーザーがログインしていることが保証されますが、必要に応じて調整できます。

また、これが機能するためにコンポーネントやjQueryを必要としないことにも言及する必要があります。Joomlaプラットフォームを活用するためだけにコンポーネント全体を作成する必要がないように、同じ2つのファイルを使用してクイックスタンドアロンページを作成します。示されているindex.phpは、通常のWebページを表示するために、jsonでエンコードされた出力の代わりに標準のHTMLを簡単に出力できます。フレームワークと私が推測するCMSの有用性の多くをバイパスしますが、特定の何かのためにすべてのオーバーヘッドを必要としない場合もあります。

components \ com_mycomponent \ platform \ joomla_platform.php:

<?php
    /* If not already done, initialize Joomla framework */
    if (!defined('_JEXEC')) {
        define( '_JEXEC', 1 );
        //        define('JPATH_BASE', dirname(__FILE__) );
        define ('JPATH_BASE', "c:\\wamp\\www\\");
        define( 'DS', DIRECTORY_SEPARATOR );
        /* Required Files */
        require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
        require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
        /* To use Joomla's Database Class */
        require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );
        require_once ( JPATH_LIBRARIES.DS.'joomla'.DS.'import.php'); // Joomla library imports.
        /* Create the Application */
        global $mainframe;
        $mainframe =& JFactory::getApplication('site');
    }
?>

components \ com_mycomponent \ platform \ index.php:

<?php
    require_once('joomla_platform.php');
    $config = new JConfig();
    $db = &JFactory::getDBO();
    $user =& JFactory::getUser();
    //Make sure a logged in user is doing the request (not mandatory, but safer)
    //if(!$user->id) {
    //  die("Not logged in");
    if($user->gid < 23) {
        die('Administrators only!');
    } else {
        $query = "SELECT * FROM jos_users ORDER BY id DESC LIMIT 1 /* Get the last registered user */";
        $db->setQuery($query);
        $row = $db->loadAssoc();
        //echo json_encode($row);                       // Return only the SQL result
        //echo json_encode(get_object_vars($user));     // Return only the user object
        //echo json_encode(get_object_vars($config));   // Return only the config object
        echo json_encode(
        array_merge(                                    // Merge the arrays, and return them all
            $row,
            get_object_vars($user),
            get_object_vars($config)
            )
        );
    }
?>

phpファイルでのjQueryの使用例:

$.ajax({
    type: "GET",
    url: "components/com_mycomponent/platform/index.php",
    dataType: "json",
    success: function(joomla) {
        alert('Joomla Platform info appended to myDiv for '+joomla.sitename);
        $.each(joomla, function(key, value) {
            $('#myDiv').append(key + ' : ' + value + '<br/>')
        });
    },
    error:function (xhr, ajaxOptions, thrownError){
        alert("Joomla Platform Error Status: " + xhr.status + " Thrown Errors: "+thrownError);
    }
});
于 2012-05-30T16:15:20.407 に答える