Форум русской поддержки Joomla!® CMS
08.12.2016, 20:12:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Ссылки субменю при создании своего компонента

 (Прочитано 476 раз)
0 Пользователей и 1 Гость смотрят эту тему.
broadcast77
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« : 23.09.2015, 03:11:04 »

Задача довольно таки простая. Но тем не менее, возникла заминка.

У меня есть несколько видов: Юзеры, Товары и Заказы.

Ну и собственно меню компонента, которое подразделяется на вышеперечисленные субменю.

Аля: мой_компонент:
                            -юзеры
                             -товары
                             -заказы

Я так понял что в файле манифеста это должно выглядеть вот так:

Код:
<menu>COM_MEDSIGNAL</menu>
<submenu>
<menu link="option=com_medsignal&amp;task=showgoods">COM_MEDSIGNAL_GOODS</menu>
<menu link="option=com_medsignal&amp;task=showusers">COM_MEDSIGNAL_USERS</menu>
<menu link="option=com_medsignal&amp;task=showorders">COM_MEDSIGNAL_ORDER</menu>
</submenu>

И далее в контроллере, на который ссылается точка входа, я создаю нужные функции

Код:
public function showgoods() {
   echo "showgoods!";
}

public function showusers() {
   echo "showusers!";
}

public function showorders() {
   echo "showorders!";
}


Проблема в том, что к сожалению при попытке открыть любой из пунктов субменю - программа всё равно ссылается на вид, который выводится по умолчанию.

Как тут быть? Спасибо!
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #1 : 23.09.2015, 12:19:29 »

а зачем вы создав три вида делаете таски?!
Открывайте виды, а не задачи сразу:
Код
<menu link="option=com_medsignal&amp;view=goods" view="goods">COM_MEDSIGNAL_GOODS</menu>
<menu link="option=com_medsignal&amp;view=users"  view="users">COM_MEDSIGNAL_USERS</menu>
<menu link="option=com_medsignal&amp;view=orders" view="orders">COM_MEDSIGNAL_ORDER</menu>
Записан
broadcast77
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #2 : 23.09.2015, 13:09:38 »

а зачем вы создав три вида делаете таски?!
Открывайте виды, а не задачи сразу:
Код
<menu link="option=com_medsignal&amp;view=goods" view="goods">COM_MEDSIGNAL_GOODS</menu>
<menu link="option=com_medsignal&amp;view=users"  view="users">COM_MEDSIGNAL_USERS</menu>
<menu link="option=com_medsignal&amp;view=orders" view="orders">COM_MEDSIGNAL_ORDER</menu>

хм, попробую. я просто смотрел видео-мануал, там было по таскам)
наверное опять наткнулся на старую версию Joomla =)
Записан
broadcast77
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #3 : 23.09.2015, 13:21:54 »

Попробовал как вы сказали.

Код:
<menu link="option=com_medsignal&amp;view=statistics" view="statistics">COM_MEDSIGNAL_GOODS</menu>

Ругается на центральный контроллер.

Код:
Fatal error: Class 'MedsignalViewsStaticticsHtml' not found in /home/v/vyrd2014/medsignal/public_html/administrator/components/com_medsignal/controllers/display.php on line 25

В нём тоже надо что то прописывать дополнительно?

UPD

Перепаковал и переустановил своё расширение. Серьёзных ошибок нет, но выдало почему то:
Код:
An error has occurred.
 0 Layout Path Not Found
« Последнее редактирование: 23.09.2015, 13:28:00 от broadcast77 » Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #4 : 23.09.2015, 16:03:59 »

Если с нуля пишете компонент то у меня в подписи ссылка на генератор каркаса компонента, сгенерируйте и не мучайтесь )
Записан
broadcast77
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #5 : 23.09.2015, 18:32:27 »

Если с нуля пишете компонент то у меня в подписи ссылка на генератор каркаса компонента, сгенерируйте и не мучайтесь )

Сгенерить то можно, но этого не достаточно. Я ведь понять пытаюсь, что к чему.
Ведь это не единственный компонент, который мне придется разрабатывать.

Мой вопрос прежний - есть ли какая нибудь связь между видами, которые мне нужны в субменю и центральным контроллером?
И если нет, то как быть?
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #6 : 23.09.2015, 19:09:21 »

Какой у вас вообще контроллер отрабатывает когда меню открывается? Сдается мне что не тот что нужен. Если научитесь пользоваться отладчиком все вопросы подобного рода отпадут.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #7 : 23.09.2015, 19:37:41 »

Мой вопрос прежний - есть ли какая нибудь связь между видами, которые мне нужны в субменю и центральным контроллером?
Главный контроллер по дефолту выполнет метод display() если указан в строка адреса вид: &view=blablabla то отобразиться нужный вид!
Если вид не указан то отобразится тот вид что стоит в $this->default_view = 'nameOfDefaultView'; если нет то будет ошибка!
Записан
broadcast77
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #8 : 23.09.2015, 23:52:27 »

Главный контроллер по дефолту выполнет метод display() если указан в строка адреса вид: &view=blablabla то отобразиться нужный вид!
Если вид не указан то отобразится тот вид что стоит в $this->default_view = 'nameOfDefaultView'; если нет то будет ошибка!

вот код моего главного контроллера.

Код:
<?php defined( '_JEXEC' ) or die( 'Restricted access' );
 
class MedsignalControllersDisplay extends JControllerBase {
public function execute() {

// Get the application
$app = $this->getApplication();

// Get the document object.
$document     = JFactory::getDocument();

$viewName     = $app->input->getWord('view', 'defaultview');
$viewFormat   = $document->getType();
$layoutName   = $app->input->getWord('layout', 'defaultview');

$app->input->set('view', $viewName);

// Register the layout paths for the view
$paths = new SplPriorityQueue;
$paths->insert(JPATH_COMPONENT . '/views/' . $viewName . '/tmpl', 'normal');

$viewClass  = 'MedsignalViews' . ucfirst($viewName). ucfirst($viewFormat);
$modelClass = 'MedsignalModels' . ucfirst($viewName);

$view = new $viewClass(new $modelClass, $paths);
$view->setLayout($layoutName);

// Render our view.
echo $view->render();

return true;
}
}

Тут всё что надо или чего то не хватает ?
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #9 : 24.09.2015, 11:45:36 »

вот код моего главного контроллера.

Тут всё что надо или чего то не хватает ?
Тут все что надо удалить, у меня дефолтный контроллер такой:
Код
class WssContentController extends JControllerLegacy
{
/**
* @var string Вид по умолчанию
*/

protected $default_view = 'articles';
/**
* Вывод вида
* @param bool $cachable
* @param array $urlparams
* @return void
*/

public function display( $cachable = false, $urlparams = array() )
{
parent::display( $cachable, $urlparams );
}
}
Записан
broadcast77
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #10 : 24.09.2015, 13:55:23 »

спасибо! попробую!

какая то неразбериха с Joomla) а вернее с мануалами. везде всё по разному))
есть хоть какой то стандарт?)


кстати, ещё такой вопрос, вот опять же - в главном контроллере метод по умолчанию называется display.
Это по стандарту задано или можно по своему назвать?
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #11 : 24.09.2015, 21:02:46 »

какая то неразбериха с Joomla) а вернее с мануалами. везде всё по разному))
есть хоть какой то стандарт?)
Да нет никакого особо стандарта, все пишут как захотят, хотя я стараюсь придерживать более менее стандарта, и в таком стандарте создает на сайте у меня генератор каркас для компонента!


кстати, ещё такой вопрос, вот опять же - в главном контроллере метод по умолчанию называется display.
Это по стандарту задано или можно по своему назвать?
Это по стандарту!
Вот например точка входа в приложение:
Код
include_once JPATH_COMPONENT . '/helpers/wsscontent.php';
$controller = JControllerLegacy::getInstance( 'wsscontent' );
$controller->execute( JFactory::getApplication()->input->get( 'task' ) );
$controller->redirect();
$controller = JControllerLegacy::getInstance( 'wsscontent' ); - получаем дефолтный контроллер!
$controller->execute( JFactory::getApplication()->input->get( 'task' ) ); - а вот тут самое интересное, если в дефолтном контроллере есть метод с названием task (тоесть например &task=test) то выполнится метод test если нету то выполнится метод display()
Записан
broadcast77
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #12 : 25.09.2015, 14:36:52 »

Да уж... спасибо вам.

Ваши туториалы в вашем блоге оченьб хорошие, попробую по ним сделать, но они просто небо и земля по сравнению с тем, что я делал до этого((
Записан
broadcast77
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #13 : 25.09.2015, 14:46:12 »

Да, простите пожалуйста за оффтоп, но у меня есть один вопрос.
Короче, всё чему были посвящены этот и другие топики.
Вообщем, суть в чём - я пытаюсь создать ajax-корзину для заказов и покупок для моего интернет-магазина.
И честно сказать, я даже до сих пор не знаю, что для этого именно нужно в Joomla то создать - модуль или компонент?

Я вот начал делать компонент, но всё никак не получается. Может мне модуль нужно делать? В чём между ними разница то?
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #14 : 25.09.2015, 16:37:09 »

Я вот начал делать компонент, но всё никак не получается. Может мне модуль нужно делать? В чём между ними разница то?
Никакой разницы, и у меня в блоге есть статьи как через AJAX стучаться и в модули и в плагины и в компонены!
А вот тут http://joomlaforum.ru/index.php/topic,302675.msg1502772.html#msg1502772 я писал мой любимый способ стучаться аяксом в компоненты (кстати этот способ внедрен в каркасе который генерирует конструктор на моем сайте)
Записан
broadcast77
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #15 : 25.09.2015, 21:08:44 »

Спасибо за помощь! Буду разбираться дальше =)
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet