2013-06-03 2 views

ответ

4

Прежде всего, необходимо создать контроллер, чтобы сделать запрос вида:

файла: Контроллеры/hello.php

 <?php 
     // Check to ensure this file is included in Joomla! 
     defined('_JEXEC') or die(); 
     class CommunityHelloController extends CommunityBaseController 
      { 
     function helloWorld() //index.php?option=com_community&view=hello&task=helloWorld 
      { 

       $document = JFactory::getDocument(); 
       $viewType = $document->getType(); 
         $view = $this->getView('hello', '' , $viewType);   
         echo $view->get('helloWorld'); 
      } 

function hello() //index.php?option=com_community&view=hello&task=hello 
     { 

      $document = JFactory::getDocument(); 
      $viewType = $document->getType(); 
        $view = $this->getView('hello', '' , $viewType);   
        echo $view->get('helloWorld'); 
     } 
     } 
?> 

Вид: вид/привет/view.html.php Здесь вы помещаете переменные, которые будут переданы в шаблон файла Например:

<?php 
    defined('_JEXEC') or die('Restricted access'); 
    jimport ('joomla.application.component.view'); 

    class CommunityViewHello extends CommunityView { 

    function helloWorld() //This function shows a "Hello World" without an template view 
     { 

      echo 'Hello World'; 
     } 


    function hello() 

    { 
     $user = CFactory::getUser($userid); 

     $tmpl = new CTemplate(); //Call a template file 

     echo $tmpl->set ('user', $user) 
       ->fetch ('hello'); // Returns the templates/default/hello.php file 

    } 
} 

шаблонов файлов/по умолчанию/hello.php:

<?php defined('_JEXEC') or die();?> 
<h2> This is an example </h2> 
<div class="container"> 
<p> Hello, <?php echo $user->name; ?></p> 
</div> 

Вот и все!

+0

Я искал этот ответ какое-то время, так что спасибо. Однако, когда я пытаюсь перейти к index.php? Option = com_community & view = hello & task = hello, он просто перенаправляет меня обратно на index.php. Я что-то пропустил? – FlabbyRabbit

+0

Я думаю, что я понял это ... 'view.html' должен быть' view.html.php' – FlabbyRabbit

0

Возможно, я сделал это в качестве комментария к ответу, данному @ Thavia-Farias в 2013 году, но моя репутация недостаточно высока, чтобы комментировать. Содержание моего ответа будет пересчитать ее информацию наряду с важнейших новых информационных, исправлений и усовершенствований по моему опыту с использованием JomSocial 4.2.1:

Во-первых, в контроллеры/hello.php, как это предусмотрено @ Thavia- Farias имеет ошибку: как в функции , так и в function helloWorld() hello() конечная строка echo $view->get('helloWorld');, но функция в function hello() должна быть echo $view->get('hello');. Как можно заметить, как * index.php? Вариант = com_community & вид = привет & задачи = HelloWorld и index.php? Вариант = com_community & вид = привет & задачи = привет оба называют вид HelloWorld, а не второй, вызывающий вид приветствия по своему усмотрению.

Кроме того, в моем опыте, а не положить шаблон на пути /templates/default/hello.php, я положил его на /шаблоны/customtemplatename/html/com_community/Раскладка, если вы используете cusomt template или /components/com_community/templates/jomsocial/layouts/, если вы используете шаблон jomsocial по умолчанию.

создать /components/com_community/controllers/hello.php:

<?php 
defined('_JEXEC') or die(); 
class CommunityHelloController extends CommunityBaseController 
{ 
     public function renderView($viewfunc, $var = NULL) { 
     $my = CFactory::getUser(); 
     $jinput = JFactory::getApplication()->input; 
     $document = JFactory::getDocument(); 
     $viewType = $document->getType(); 
     $viewName = $jinput->get('view', $this->getName()); 
     $view = $this->getView($viewName, '', $viewType); 
     echo $view->get($viewfunc, $var); 
    } 

    function helloWorld() 
    { 
     $this->renderView(__FUNCTION__); 
    } 

    function hello() 
    { 
     $this->renderView(__FUNCTION__); 
    } 

     function display($cacheable = false, $urlparams = false) { 
     $this->renderView(__FUNCTION__); 
    } 
} 
?> 

создать /var/www/html/components/com_community/views/hello/view.html.php:

<?php 
    defined('_JEXEC') or die('Restricted access'); 
    jimport ('joomla.application.component.view'); 

    class CommunityViewHello extends CommunityView { 

    function helloWorld() //This function shows a "Hello World" without an template view 
     { 
      echo 'Hello World'; 
     } 

     function display() //This function what happens when the hello view is called without a task 
     { 
       echo 'welcome to the main landing page for the hello view! There is nothing else shown here besides this message.'; 
     } 


    function hello() 

    { 
     echo $tmpl->fetch('hello'); 
    } 


    } 

Как вы можете видеть, если вы хотите, чтобы ваш взгляд, чтобы иметь представление по умолчанию, даже если ни одна из задач не называется, подобно тому, что происходит с /index.php?option=com_community & view = groups, тогда вы хотите назвать задачу как функцию отображения в контроллере и в представлении.

, наконец, создать /components/com_community/templates/jomsocial/layouts/hello.PHP:

<?php defined('_JEXEC') or die();?> 
<h2> This is an example </h2> 
<div class="container"> 
<p> Hello, <?php echo $my->name; ?></p> 
</div> 

$ моего был определен еще в контроллере! Если ваша группа взглядов и задач достаточно велика, у вас будут разные файлы для каждой задачи. Файлы задач с функцией выборки в view.html.php.

$tmpl = new CTemplate(); //Call a template file 
echo $tmpl->set ('vars1', $vars1) 
echo $tmpl->set ('vars2', $vars2) 
echo $tmpl->set ('vars3', $vars3) 
      ->fetch ('hello'); 

называет файл /components/com_community/templates/jomsocial/layouts/hello.php.

Использование ->fetch ('hello.greeting'); вызовов /components/com_community/templates/jomsocial/layouts/hello.greeting.php.

Если вы хотите создать новый каталог для этих затем ->fetch ('hello/create'); вызовов /components/com_community/templates/jomsocial/layouts/hello/create.php

Если вы хотите, чтобы создать пункты меню и псевдонимы ваши новые компоненты, тогда вам нужно создать новый файл (а также второй и изменить третий, если вы хотите выполнить заданные параметры параметров меню для своих задач):

создать файл: /components/com_community /views/hello/metadata.xml:

<?xml version="1.0" encoding="utf-8"?> 
<metadata> 
     <view title="Groups"> 
       <message> 
         <![CDATA[ 
           Hello view 
         ]]> 
       </message> 
       <options var="task"> 
         <default name="Hello" msg="displays landing page" /> 
         <option value="hello" name="- one greeting" msg="Display detail page of one greeting" /> 
         <option value="helloWorld" name="- helloworldview" msg="Display whatever you have in the hello world task" /> 
       </options> 
     </view> 
     <state> 
       <name>Hello Groups Layout</name> 
       <description>Hello Groups listings</description> 
     </state> 
</metadata> 

Этот файл добавит элементы в раздел «сообщество» в меню на панели меню администратора. Опция value s - это имена задач. Опция без value, которая использует тег default, вытащит функцию display, описанную ранее.

Если вам необходимо добавить параметры в файл, то вам нужно сделать что-то немного сложнее:

создать /components/com_community/views/hello/tmpl/default.xml:

<?xml version="1.0" encoding="utf-8"?> 
<metadata> 
    <layout title="Name" option="View"> 
     <message> 
     </message> 
    </layout> 
    <fields name="params"> 
     <fieldset 
      name="basic" 
      label="Selected Group"> 
      <field 
       name="item_id" 
       query="SELECT `id`, `name` FROM #__community_groups_category WHERE ORDER BY `id`" 
       type="sql" 
       key_field="id" 
       value_field="name" 
       label="Associated Group" 
       require="true" 
       description="Select the jomsocial group whose hello task this will be associated with"> 
      </field> 
     </fieldset> 
    </fields> 
</metadata> 

Это создаст вкладку, в которой пользователи могут указать одну группу из доступных групп в базе данных. Он назначит идентификатор группы полю параметров в таблице базы данных #__menu в объекте JSON params как значение для ключа item_id. Для того, чтобы ваше мнение, чтобы использовать это значение при отображении страницы, включить следующий код в просмотров/HELO/view.html.php:

 $mainframe = JFactory::getApplication(); 
     $jinput = $mainframe->input; 
     $document = JFactory::getDocument(); 


     // Get category id from the query string if there are any. 
     $groupId = $jinput->getInt('group', 0); 


           // Load the parameters. 
       $params  = $mainframe->getParams(); 
       $params_array = $params->toArray(); 

       if (isset($params_array['item_id'])) 
       { 
          $groupId = $params_array['item_id']; 
       } 

В этом случае ваша задача может получить необходимые особенности из либо URL-адрес, если он указан внутри вашего компонента (option = com_community & view = hello & task = hello & groupid = 5), или из вызываемого в главном меню или jcomocial элементов панели инструментов хранимых параметров в базе данных меню таблицу для этого пункта меню.

Параметры и вкладка, которые вы создаете здесь, будут видны для всех пунктов меню этой задачи. Если вам нужны разные вкладки для разных параметров меню, вам придется создавать совершенно разные виды. наличие всего в одном представлении может привести к неиспользуемым и потенциально вводящим в заблуждение вкладкам, где значения могут быть установлены вашими пользователями, но это не будет или не должно использоваться фактической задачей, заданной пользователем.

Простите, что я не тестировал каждую строку этого кода в интегрированном компоненте. Я выполнил все эти функции на мой взгляд, но сократил свой код, который был построен с первоначальным руководством из ответа @ Thavia-Farias. Хотя это более понятно, чем публикация моего обширного кода, он не был протестирован в текущей форме для функциональности. Обязательно проверьте свои журналы ошибок php для отладки вашего проекта. Я должен войти в систему как root (sudo su) и проверить с помощью nano/var/log/mysqld/error_log в моей системе. Удачи!

Смежные вопросы