Помогите доделать код в модуле для ZOO

  • 8 Ответов
  • 377 Просмотров

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

*

Оффлайн radiant

Создавая модуль, который бы мог вывести из компонента ZOO количество опубликованных материалов, из приложения с ID №1 с несколькими только отдельными типами материалов (например: отель 'hotel', ресторан 'restoran', компания 'company'), а остальные типы материалов не брались бы в подсчет.
Я в PHP особо не силен. Помогите создать правильный запрос к базе данных.
Написал в файле helper.php вот такой вариант, но где указываю типы материалов тут выдает ошибку, а без них все нормально. Помогите пожалуйста кто силен.

static function getItems($params) {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('COUNT(id) AS count_items');
$query->from('#__zoo_item');
$query->where('state = 1');
$query->where('application_id = 1');
$query->where('type = hotel');
$query->where('type = restoran');
$query->where('type = company');
$db->setQuery($query);
$items = $db->loadResult();
return $items;
}

как укоротить код тоже не знаю.
К этой теме прикрепил архив с этим модулем.
« Последнее редактирование: 30.07.2016, 13:08:55 от radiant »

*

Оффлайн voland

  • ********
  • 9334
  • [+]520 / [-]101
  • СКАЙП утерян! Пишите в телеграм @volandku
    • Просмотр профиля
    • webstudio.pro
Может проще на платной основе сделать?

*

Оффлайн passer

Так вроде.
Код: (php) [Выделить]
$query->where('type = hotel', 'OR');
$query->where('type = restoran', 'OR');
$query->where('type = company');

*

Оффлайн radiant

Благодарю за первую поддержку!

Применил ваш вариант, но к сожалению выводит ошибку "Страницы не существует"

и пишет: Unknown column 'hotel' in 'where clause' SQL=SELECT COUNT(id) AS count_items FROM #__zoo_item WHERE state = 1 AND application_id = 1 AND type = hotel AND type = restoran AND type = company

хотя в базе есть материалы с типом: hotel, restoran, company.

*

Оффлайн vipiusss

  • ********
  • 5445
  • [+]327 / [-]10
  • Skype: renor_
    • Просмотр профиля
Так вам до этого таблицы надо сделать запросом.
Вам пишут немного не так:вы сначало сделайте куда, а потом уже код.

Если можете - выложите модуль, как вы его делаете, быстрее подскажем.
И Volanda привлёчём, а то соскучился смотрю )))
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями

*

Оффлайн radiant

Здравствуйте! К теме прикрепил архив с модулем.

В благодарность прикрепил архив с элементом links для ZOO и бесплатного пользования - http://joomlaforum.ru/index.php/topic,329645.0.html

*

Оффлайн passer

Ну так попробуйте
Код: (php) [Выделить]
$query->where('type = "hotel"', 'OR');
$query->where('type ="restoran"', 'OR');
$query->where('type = "company"');

*

Оффлайн radiant

Ну так попробуйте
Код: (php) [Выделить]
$query->where('type = "hotel"', 'OR');
$query->where('type ="restoran"', 'OR');
$query->where('type = "company"');

Теперь показывает 0 материалов.

*

Оффлайн shtier

  • ***
  • 76
  • [+]6 / [-]0
  • Чак Норрис никогда не спит. Он выжидает.
    • Просмотр профиля
В Zoo есть метод /administrator/components/com_zoo/helpers/module.php
/**
* Get items from ZOO module params.
*
* @param AppData $params Module Parameter
* @return array Items
*/
public function getItems($params) {

$items = array();
if ($application = $this->app->table->application->get($params->get('application', 0))) {

// set one or multiple categories
$category = (int) $params->get('category', 0);
if ($params->get('subcategories')) {
$categories = $application->getCategoryTree(true);
if (isset($categories[$category])) {
$category = array_merge(array($category), array_keys($categories[$category]->getChildren(true)));
}
}

// get items
if ($params->get('mode') == 'item') {
if (($item = $this->app->table->item->get($params->get('item_id'))) && $item->isPublished() && $item->canAccess()) {
$items[] = $item;
}
} else if ($params->get('mode') == 'types') {
$items = $this->app->table->item->getByType($params->get('type'), $application->id, true, null, $params->get('order', array('_itemname')), 0, $params->get('count', 4));
} else {
$items = $this->app->table->item->getByCategory($application->id, $category, true, null, $params->get('order', array('_itemname')), 0, $params->get('count', 4));
}
}
return $items;
}

Переписал ваш модуль (https://db.tt/zOi4DPGc), из расчёта что "приложений" может быть несколько и "типов" может быть несколько - дальше уже сами.
В параметрах заполнение вида
apps: 0,1,2
types: article, item, author

« Последнее редактирование: 01.08.2016, 20:12:08 от shtier »