2011-12-30 3 views
1

결국 외부 데이터 소스에서 데이터를 가져 오는 Joomla 모듈을 구축 중입니다. 지금 내가 배우는 동안, 단순히 "이 비트가 올바르게 작동합니다"라는 문자열을 모듈 위치에 인쇄하도록 설정했습니다. 그러나, 제대로 작동하도록 문제가 발생했습니다. 여기 내 코드입니다 :Joomla 1.5 모듈 출력 return 문

mod_ucr.php :

<?php 
/** 
* UniversalContentRepository Module Entry Point 
* 
* @package UniversalContentRepository 
* @subpackage Modules 
*/ 

// no direct access 
defined('_JEXEC') or die('Restricted access'); 

// Include the syndicate functions only once 
require_once(dirname(__FILE__).DS.'helper.php'); 
$helper = new modUCRHelper(); 
$content = $helper->getSnippetContent(); 
require(JModuleHelper::getLayoutPath('mod_ucr')); 
?> 

mod_ucr.xml

<?xml version="1.0" encoding="utf-8"?> 
<install type="module" version="1.5.0"> 
    <name>Universal Content Repository</name> 
    <author>Brendon Dugan</author> 
    <version>1.5.0</version> 
    <description>A module to allow the insertion of UCR Snippets into a Joomla site.</description> 
    <files> 
     <filename>mod_ucr.xml</filename> 
     <filename module="mod_ucr">mod_ucr.php</filename> 
     <filename>index.html</filename> 
     <filename>helper.php</filename> 
     <filename>tmpl/default.php</filename> 
     <filename>tmpl/index.html</filename> 
    </files> 
    <params> 
    </params> 
</install> 

helper.php :

<?php 
class modUCRHelper 
{ 
    function __construct(){ 

    } 


    public function getSnippetContent($id = 0){ 
     $content = "This bit works correctly, ID = $id"; 
     return $content; 
    } 
} 
?> 

tmpl/default.php :

<?php // no direct access 
defined('_JEXEC') or die('Restricted access'); 
echo $content; 
?> 

변수 $ content를 헬퍼 클래스의 getSnippetContent() 메소드의 출력으로 설정합니다. 이 방법은 현재 :

function getSnippetContent($id = 0){ 
    $output = "This bit works correctly"; 
    return $output; 
} 

단순히 인쇄 할 문자열을 출력합니다. 내 템플릿에서이 같은 내용 에코 할 수 있어야한다 :

<?php // no direct access 
defined('_JEXEC') or die('Restricted access'); 
echo $content; 
?> 

을하지만 모듈 출력하는 대신에 내가 에코 문을 주석으로 경우

"This bit works correctlyThis bit works correctly" 

, 문자열이 여전히 한 번 감동입니다, return 문 자체가 울리고 있음을 나타냅니다.

"Hello World!"의 코드를 수정했습니다. 예 : in the Joomla documentation. 어떤 아이디어?

+0

모듈에 대한 모든 (4 가지로 생각하는) 파일을 게시 할 수 있습니까? –

답변

2

이 모듈

$content = ''; 
ob_start(); 
require $path; 
$module->content = ob_get_contents().$content; 
ob_end_clean(); 

그것은 $ 콘텐츠 변수 자체를 사용을 표시하기위한 핵심 줌라 코드입니다. 그리고 귀하의 모듈은 $ content의 가치를 변화시키고 있습니다. 하나는 모듈 출력이고 다른 하나는 joomla 코드입니다. 모듈의 내용을 (모듈에서 변경된) $ content 변수에 추가합니다.

코드에 $ content 변수를 사용하지 마십시오.

+0

그걸 고쳐 줘! 나는 Joomla의 문서에서 그걸 보지 못했습니다 ... 당신이 미리 경고 할 수있는 다른 문서화되지 않은 함정이 있습니까? –

+1

나는 또한 그 사실을 알지 못했을 때, 내가 당신의 문제에 대한 해결책을 찾고있을 때를 알게되었습니다. – Gaurav

0

return 문장이 울리지 않습니다.

아이디어는 함수에 정보를 추가하는 것입니다. 그래서

function getSnippetContent($id = 0){ 
    $output = "This bit works correctly. ID=" .$id ."<br>"; 
    return $output; 
} 

같은 출력으로 ID를 추가 시도 즉 어떤 아이디어가 트리거되는지. 모듈을 두 번 추가했을 수도 있습니다.

+0

출력에 ID를 추가하면 id가 출력과 함께 화면에 인쇄되지만 문제가 해결되지 않습니다. 그러나 echo 문을 주석 처리하면 출력이 한 번만 인쇄되도록 변경됩니다. echo 문이없고 출력 결과가 있으면 return 문이 울리고 있음을 나타냅니다. –

+0

코드에서 getSnippetContent를 검색하십시오. 뭘 찾았 니? –

+0

전체 프로젝트는 총 10 줄 미만의 실제 코드로 구성됩니다.getSnippetContent를 검색하면 함수 정의가 반환되고 해당 출력을 $ content 변수에 할당하기 위해 호출됩니다. –