Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 15 Ответов
  • 1423 Просмотров
*

rad_eugen

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Доброго всем дня!
Прошу сильно не пинать, так как в этой теме не совсем ориентируюсь.
Пробую писать компонент для собственных нужд. В этом компоненте есть несколько контроллеров, моделей и видов.
Есть пункт меню, который ссылается на определенный, не дефолтный, вид, а в этом виде нужно вывести инфу из БД, полученную соответствующей моделью.
Так вот как в виде дать понять, какой именно контроллер использовать, в котором есть ссылка на нужную модель? Чет я запутался..
Вот вид:
Код
<?php
defined('_JEXEC') or die('Restricted access');
 
jimport('joomla.application.component.view');
 

class CartStoreViewUnship extends JViewLegacy
{

    protected $list;
 
 
    public function display($tpl = null)
    {
   
        // Получаем сообщение.
        $this->list = $this->get('Items');

        // Отображаем представление.
        parent::display($tpl);
    }
}

Вот контроллер:
Код
<?php

defined('_JEXEC') or die;


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

class CartStoreControllerUnship extends JControllerLegacy
{
public function display()
{

$model = $this->getModel('Unship', 'CartStoreModel');

//JRequest::setVar('view','unship');

parent::display();
}
}

Вот модель:
Код
<?php

defined('_JEXEC') or die;

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


class CartStoreModelUnship extends JModelList
{

public function getItems()
{

$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select('id, date, cart_name, deps_name, GK, ship');
$query->from('#__cartstore_store AS store, #__cartstore_cart AS cart, #__cartstore_deps AS deps');
$query->where('cart.cart_id = store.cart_id');
$query->where('deps.deps_id = store.deps_id');
$query->where('ship = "Нет"');
$query->order('id DESC');

$list = $db->loadObjectList();

return $list;


}


}
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Вам нужно в главном контроллере установить логику передачи модели в представление. Посмотрите, как это сделано в com_users.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Только один нюанс - если Вы пишите под Joomla 2.5, то $this->input надо заменить на JFactory::getApplication()->input
*

rad_eugen

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Вам нужно в главном контроллере установить логику передачи модели в представление. Посмотрите, как это сделано в com_users.
Спасибо!
Если я правильно понял логику, то в основном контроллере нужно из строки запроса вычленить название вида и в соответствии с ним назначить нужную модель?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Спасибо!
Если я правильно понял логику, то в основном контроллере нужно из строки запроса вычленить название вида и в соответствии с ним назначить нужную модель?
Именно так.
*

rad_eugen

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Я дико извиняюсь, но как-то у меня не срослось  :'(
Переписал основной контроллер:
Код
<?php

defined('_JEXEC') or die;

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

class CartStoreController extends JControllerLegacy
{
public function display($cachable = false, $urlparams = false)
{
// Get the document object.
$document = JFactory::getDocument();

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

// Set the default view name and format from the Request.
$vName   = $jinput->getCmd('view', 'cartstore');
$vFormat = $document->getType();
$lName   = $jinput->getCmd('layout', 'default');

if ($view = $this->getView($vName, $vFormat))
{
// Do any specific processing by view.
switch ($vName)
{
case 'changecart':

// The user is a guest, load the registration model and show the registration page.
$model = $this->getModel('ChangeCart', 'CartStoreModel');
break;

// Handle view specific models.
case 'unship':

$model = $this->getModel('Unship', 'CartStoreModel');
break;

default:
$model = $this->getModel('CartStore', 'CartStoreModel');
break;
}

// Push the model into the view (as default).
$view->setModel($model, true);
$view->setLayout($lName);

// Push document object into the view.
$view->document = $document;

$view->display();
}


}
}

Но в нужном виде все равно получаю ересь, типа (это дамп переменной, которая идет из модели)
Код
array(5) {
  [0]=>
  object(stdClass)#271 (4) {
    ["id"]=>
    string(1) "4"
    ["home"]=>
    string(1) "0"
    ["template"]=>
    string(5) "beez3"
    ["params"]=>
    string(208) "{"wrapperSmall":"53","wrapperLarge":"72","logo":"images\/joomla_black.gif","sitetitle":"Joomla!","sitedescription":"Open Source Content Management","navposition":"left","templatecolor":"personal","html5":"0"}"
  }
  [1]=>
  object(stdClass)#270 (4) {
    ["id"]=>
    string(1) "5"
    ["home"]=>
    string(1) "1"
    ["template"]=>
    string(7) "rsmetro"
    ["params"]=>
    string(112) "{"logoFile":"images\/logo.png","sitetitle":"","sitedescription":"","googleFont":"1","googleFontName":"Segoe UI"}"
  }
  [2]=>
  object(stdClass)#269 (4) {
    ["id"]=>
    string(1) "7"
    ["home"]=>
    string(1) "0"
    ["template"]=>
    string(9) "protostar"
    ["params"]=>
    string(101) "{"templateColor":"","logoFile":"","googleFont":"1","googleFontName":"Open+Sans","fluidContainer":"0"}"
  }
  [3]=>
  object(stdClass)#268 (4) {
    ["id"]=>
    string(1) "9"
    ["home"]=>
    string(1) "0"
    ["template"]=>
    string(5) "beez3"
    ["params"]=>
    string(208) "{"wrapperSmall":"53","wrapperLarge":"72","logo":"images\/joomla_black.gif","sitetitle":"Joomla!","sitedescription":"Open Source Content Management","navposition":"left","templatecolor":"personal","html5":"0"}"
  }
  [4]=>
  object(stdClass)#266 (4) {
    ["id"]=>
    string(2) "10"
    ["home"]=>
    string(1) "0"
    ["template"]=>
    string(10) "beez3_copy"
    ["params"]=>
    string(209) "{"wrapperSmall":53,"wrapperLarge":72,"logo":"images\/logo.png","sitetitle":"","sitedescription":"","navposition":"center","bootstrap":"","templatecolor":"personal","headerImage":"","backgroundcolor":"#eeeeee"}"
  }
}


Если сделать дамп $view, то модель, вроде как, нужная прописывается:
Код
["_defaultModel":protected]=>
  string(6) "unship"

Где я накосячил?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Честно говоря, как-то не вижу где. Но метод в представлении почему-то возвращает список шаблонов... Ерунда какая-то =) Покажите точку входа.
*

rad_eugen

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Вот точка входа:
Код
<?php

defined('_JEXEC') or die;

// Подключаем логирование.
JLog::addLogger(
array('text_file' => 'com_cartstore.php'),
JLog::ALL,
array('com_cartstore')
);
 
jimport('joomla.application.component.controller');


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


$controller->execute(JRequest::getCmd('task'));


$controller->redirect();
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Хмм, тут тоже все ок. Где-то нестыковка, вот только не вижу где... Какая у Вас ссылка в пункте меню? index.php?option=com_cartstore&view=unship ?
*

rad_eugen

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
index.php?option=com_cartstore&view=unship&Itemid=180
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

rad_eugen

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Код
["_name":protected]=>
  string(6) "unship"
  ["_models":protected]=>
  array(1) {
    ["unship"]=>
    object(CartStoreModelUnship)#279 (13) {
      ["cache":protected]=>
      array(0) {
      }

["_defaultModel":protected]=>
  string(6) "unship"

*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

rad_eugen

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Мне кажется, что-то не то с переменной $list.
Ради чистоты эксперимента добавил в модель новый метод:
Код
public function getGreeting()
{
return "GreetGreetGreet";
}


в виде добавил
Код
$this->greet = $this->get('Greeting');

и в представлении в дампе нашел такой кусок:
Код
["greet":protected]=>
  string(15) "GreetGreetGreet"
*

rad_eugen

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Вот теперь действительно дико извиняюсь!
Мой косяк - в модели забыл добавить всего лишь одну строчку $db->setQuery($query); и из-за этого в ДБ попадал не нужный запрос!
b2z Огромное спасибо за уделенное внимание и терпение!
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как ограничить доступ в панель управления Joomla3?

Автор allexp

Ответов: 2
Просмотров: 1278
Последний ответ 17.02.2015, 15:41:57
от allexp
SOS! Добавление дополнительного фильтра в модель вида блога

Автор titansword

Ответов: 2
Просмотров: 7316
Последний ответ 11.10.2011, 17:41:08
от Виталик