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

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

Написание Компонента

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

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

Сообщений: 99


« : 31.08.2016, 11:58:47 »

Ребят, всем привет. Подскажите пожалуйста.
  • 1.Написал компонент.  В Админке всё ок выводится, а в пользовательской части ошибка 404. по адресу index.php?option=com_componame Представление не найдено [name, type, prefix]:componame, HTML, componameView. Хотя в папке componame в файле view.html.php всё прописано.
    2.И ещё хочу написать поиск, и хочу чтобы выводился список найденных слов выводился через AJAX. Какой URL прописывать к обработчику? url:index.php?option=com_compname/file/class/method   ?


Заранее спасибо.
Записан
jservice
Осваиваюсь на форуме
***

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

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


« Ответ #1 : 31.08.2016, 12:18:28 »

1.Написал компонент.

Так написали или программой создали))) Если бы написали то такое не спрашивали

Классы перепишите с заглавных букв class СompoСameView  extends JViewLegacy
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #2 : 31.08.2016, 12:52:19 »

Так написали или программой создали))) Если бы написали то такое не спрашивали

Классы перепишите с заглавных букв class СompoСameView  extends JViewLegacy

Сам, но по инструкции так скажем. Спасибо, но не помогло
Записан
Septdir
Живу я здесь
******

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

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


Skype: septdir


« Ответ #3 : 31.08.2016, 13:12:14 »

1.Написал компонент.  В Админке всё ок выводится, а в пользовательской части ошибка 404. по адресу index.php?option=com_componame Представление не найдено [name, type, prefix]:componame, HTML, componameView. Хотя в папке componame в файле view.html.php всё прописано.
Скорее всего ошибка в в componame.php ибо же в url не указываете какая вьюшка. А дефолтную не прописали.
2.И ещё хочу написать поиск, и хочу чтобы выводился список найденных слов выводился через AJAX. Какой URL прописывать к обработчику? url:index.php?option=com_compname/file/class/method   ?[/li][/list]
AJAX делается через контролер. В него предаем через юрл index.php?option=com_compname&task=name.fuction&format=json(как вариант). из него в модель а возвращаем вьюшку в формате json. через  new JResponseJson()
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #4 : 31.08.2016, 13:17:36 »

Скорее всего ошибка в в componame.php ибо же в url не указываете какая вьюшка. А дефолтную не прописали.AJAX делается через контролер. В него предаем через юрл index.php?option=com_compname&task=name.fuction&format=json(как вариант). из него в модель а возвращаем вьюшку в формате json. через  new JResponseJson()

Спасибо за такой ответ)) URL пишу так index.php?option=com_componame и так же пробовал index.php?option=com_componame&view=ivgpu всё равно
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #5 : 31.08.2016, 13:27:42 »

Скорее надо было сразу код выложить view.html.php

<?php

defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.view');

class IvgpuViewIvgpu extends JViewLegacy
{

    protected $item;

    public function display($tpl = null)
    {
      $this->item = 'Hello World';


        parent::display($tpl);

        $this->setDocument();
    }
}
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #6 : 31.08.2016, 15:54:25 »

Покажите файл точки входа компонента componame.php и controller.php
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #7 : 31.08.2016, 16:12:34 »

Покажите файл точки входа компонента componame.php и controller.php

Спасибо, Дмитрий, что ответили)) Писал этот компонент по вашим блогам)

<?php

defined('_JEXEC') or die;

JError::$legacy = false;

jimport('joomla.application.component.controller');

$controller = JControllerLegacy::getInstance('Ivgpu');

$input = JFactory::getApplication()->input;

$controller->execute($input->getCmd('task', 'display'));

$controller->redirect();


controller.php

<?php

defined('_JEXEC') or die;

jimport('joomla.application.component.controller');

class IvgpuController extends JControllerLegacy
{
}
Записан
AlekVolsk
Профи
********

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

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



« Ответ #8 : 31.08.2016, 16:21:50 »

У вас получается, что вы вызываете метод в контроллере, которого не существует

ваш ivgpu.php:
Код
<?php defined( '_JEXEC' ) or die;
$controller = JControllerLegacy::getInstance( 'ivgpu' );
$controller->execute( JFactory::getApplication()->input->get( 'task' ) );
$controller->redirect();

ваш controller.php:
Код
<?php defined( '_JEXEC' ) or die;
class IvgpuController extends JControllerLegacy
{
 
function display( $cachable = false, $urlparams = array() )
{
$this->default_view = 'myview'; // сюда вписать имя вида по умолчанию, обязательно!
parent::display( $cachable, $urlparams );
return $this;
}
 
}
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #9 : 31.08.2016, 16:26:48 »

У вас получается, что вы вызываете метод в контроллере, которого не существует

ваш ivgpu.php:
Код
<?php defined( '_JEXEC' ) or die;
$controller = JControllerLegacy::getInstance( 'ivgpu' );
$controller->execute( JFactory::getApplication()->input->get( 'task' ) );
$controller->redirect();

ваш controller.php:
Код
<?php defined( '_JEXEC' ) or die;
class IvgpuController extends JControllerLegacy
{
 
function display( $cachable = false, $urlparams = array() )
{
$this->default_view = 'myview'; // сюда вписать имя вида по умолчанию, обязательно!
parent::display( $cachable, $urlparams );
return $this;
}
 
}

Спасибо но тоже не помогло(((
Записан
AlekVolsk
Профи
********

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

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



« Ответ #10 : 31.08.2016, 16:29:49 »

тогда запакуйте папку компонента и прикрепите архив к следующему своему посту
хотя вложения могут быть вам недоступны, т.к. нет 10 постов на форуме. тогда кидайте архив на файлобменник
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #11 : 31.08.2016, 16:36:53 »

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

https://yadi.sk/d/LB7RDLQIudYHT Спасибо большое вам))
Записан
AlekVolsk
Профи
********

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

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



« Ответ #12 : 31.08.2016, 16:49:18 »

в папке с компонентом папку view переименуйте в views
в виде в view.html.php строку parent::display($tpl); допишите так: return parent::display($tpl);
что получится?
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #13 : 31.08.2016, 16:52:37 »

в папке с компонентом папку view переименуйте в views
в виде в view.html.php строку parent::display($tpl); допишите так: return parent::display($tpl);
что получится?

Работает!Спасибо вам большое)))
Записан
AlekVolsk
Профи
********

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

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



« Ответ #14 : 31.08.2016, 16:53:25 »

нзч. будьте внимательнее, у меня у самого, несмотря на опыт, те же ошибки достаточно часто ))
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #15 : 31.08.2016, 16:56:18 »

нзч. будьте внимательнее, у меня у самого, несмотря на опыт, те же ошибки достаточно часто ))

А вы случайно по AJAX ещё не могли проконсультировать? jQuery.ajax(
            type: "POST",
            url:'index.php?option=com_ivgpu&task=teacher',
            data:'teacher='.jQuery(this).val();
        success:function(e){
            $('div.block').html(e);
        }

Вот так я правильно обращаюсь к классу teacher? Заранее спасибо
Записан
AlekVolsk
Профи
********

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

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



« Ответ #16 : 31.08.2016, 17:01:08 »

вы вызываете контроллер IvgpuControllerAjax, а в нем метод teacher, который ессно должен быть реализован и выдать определенный результат, в конце метода обязательно exit вызывать, иначе на выходе получите не результат функции, а всю главную страницу сайта
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #17 : 31.08.2016, 17:06:02 »

вы вызываете контроллер IvgpuControllerAjax, а в нем метод teacher, который ессно должен быть реализован и выдать определенный результат, в конце метода обязательно exit вызывать, иначе на выходе получите не результат функции, а всю главную страницу сайта
С чего вдруг IvgpuControllerAjax?

Для AJAX лучше вызывать format=raw
Код
index.php?option=com_ivgpu&task=teacher&format=raw

Метод teacher должен быть тогда в главном контроллере controller.raw.php (IvgpuController), а если нужно использовать конкретный контроллер, то:
Код
index.php?option=com_ivgpu&task=ivgpu.teacher&format=raw

Тогда будет controllers/ivgpu.raw.php (IvgpuControllerIvgpu) и в нём метод teacher.
« Последнее редактирование: 31.08.2016, 17:12:20 от b2z » Записан
AlekVolsk
Профи
********

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

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



« Ответ #18 : 31.08.2016, 17:10:06 »

мне кажется, ТС, вам прежде чем за AJAX братся, надо стандартную логику поднять и понять, а уж потом совершенствоваться вглубь дальше, не все так тривиально может быть, как то может изначально показаться
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #19 : 31.08.2016, 17:27:59 »

мне кажется, ТС, вам прежде чем за AJAX братся, надо стандартную логику поднять и понять, а уж потом совершенствоваться вглубь дальше, не все так тривиально может быть, как то может изначально показаться

мне через AJAX нужно обратиться к методу teacher в классе IvgpuControllerSearch. значит будет так? index.php?option=com_ivgpu&task=search.teacher&format=search

Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #20 : 31.08.2016, 17:41:04 »

Код
index.php?option=com_ivgpu&task=search.teacher
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #21 : 31.08.2016, 18:10:07 »

Код
index.php?option=com_ivgpu&task=search.teacher
Спасибо вам, Дмитрий и спасибо, AlekVolsk))))
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #22 : 01.09.2016, 10:12:51 »

А не могли бы ещё помочь?(

jQuery(document).ready(function(){
    jQuery('.search_teacher').keydown(function(){
        jQuery.ajax({
            type: "POST",
            url:'index.php?option=com_ivgpu&task=search.teacher',
            data:'name='+jQuery(this).val(),
        success:function(e){
            jQuery('div.block').html(e);
        }
    }
        )
    });
});

Этой функцией отрпаляю запрос к методу teacher класса IvgpuControllerSearch но мне выдаёт ошибку

<div class="block"><br>
<b>Warning</b>:  Missing argument 1 for IvgpuControllerSearch::teacher(), called in /home/u177306/iv-politehru/www/libraries/legacy/controller/legacy.php on line 702 and defined in <b>/home/u177306/iv-politehru/www/components/com_ivgpu/controllers/search.php</b> on line <b>11</b><br>
<br>
<b>Fatal error</b>:  Call to a member function searchTeacher() on a non-object in <b>/home/u177306/iv-politehru/www/components/com_ivgpu/controllers/search.php</b> on line <b>13</b><br>
</div>

Как понимаю данные не получает. Как правильно передавать данные? Заранее благодарю
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #23 : 01.09.2016, 10:28:01 »

Покажите код класса IvgpuControllerSearch - под спойлер.
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #24 : 01.09.2016, 10:42:30 »

Показать текстовый блок
]
Спасибо, Дмитрий
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #25 : 01.09.2016, 10:56:01 »

А теперь покажите модель )
p.s. это кстати не Laravel
public function teacher($name){
так работать не будет!
надо
public function teacher(){
$name =$this->input->getString('name', '');
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #26 : 01.09.2016, 10:57:31 »

А теперь покажите модель )

Показать текстовый блок
Записан
zheev
Осваиваюсь на форуме
***

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

Сообщений: 99


« Ответ #27 : 01.09.2016, 11:03:58 »

А теперь покажите модель )
p.s. это кстати не Laravel
public function teacher($name){
так работать не будет!
надо
public function teacher(){
$name =$this->input->getString('name', '');

Спасибо Сейчас попробую))
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #28 : 01.09.2016, 11:07:17 »

и так, в модели, тоже не будет работать:  select('fname','id')
Код
public function searchTeacher( $name )	{
$query = $this->getDbo()->getQuery( true )
->select( 'fname, id' )
->from( '#__teacher' )
->where( 'fname LIKE ' . $this->getDbo()->q( '%' . $name . '%' ) );
return $this->getDbo()->setQuery( $query )->loadObjectList();
}
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #29 : 01.09.2016, 11:08:33 »

P.S. если у вас Joomla 3+ то вот это jimport('joomla.application.component.modelitem'); в модели не нужно!
Записан
Страниц: [1] 2 3 4 5 6 7   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

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