Обращалась на форуме за помощью в доработке компонента "Клубы", но никто не откликнулся. Реализовать задумку помог брат. Делюсь полученным — вдруг кому-то будет полезным. Так как брат видел InstantCMS первый раз, поэтому просьба сильно ногами не пинать, если что-то сделано вопреки стандартной логике движка.
Что мне было нужно:
1. Добавить возможность выбора категории при создании клуба
2. Сделать, чтобы на странице клуба под названием ссылкой высвечивалась категория данного клуба, при нажатии на нее выводился список всех клубов данной категории.
Что для этого нужно изменить
1. Создаем новую таблицу с требующимися категориями клубов:
2. Добавляем в cms_clubs новое поле cat_id [int(3)]
3. В существующий файл шаблона (com_clubs_create.tpl) добавляем строку таблицы с новым элементом формы
4. Добавляем новую запись в языковой файл \languages\ru\components\clubs.php
5. Заменяем функцию создания нового клуба, для этого в components\clubs\frontend.php
в части //////////// CREATE CLUB /////////////////////
( if(!$errors) )
заменяем
$created_id = $model->addClub(array('user_id'=>$inUser->id, 'title'=>$title, 'clubtype'=>$clubtype, $cfg);
на
$created_id = $model->addClub(array('user_id'=>$inUser->id, 'title'=>$title, 'clubtype'=>$clubtype, 'clubcat'=>$clubcat), $cfg);
и после
$clubtype = $inCore->request('clubtype', 'str');
добавляем
$clubcat = $inCore->request('clubcat', 'str');
6. В файле components\clubs\model.php добавляем публичную функцию внутри класса cms_model_clubs
class cms_model_clubs{
бла-бла-бла
...
СЮДА!
}
7. В файле components\clubs\frontend.php в части ////////// VIEW SINGLE CLUB //////
получаем значение поля cat_id
после
$pagetitle = $club['title'];
добавляем
$clubcat = $club['cat_id'];
и передаем в шаблон
после
$smarty->assign('pagetitle', $pagetitle);
добавляем
$smarty->assign('clubcat', $model->getClubCat($clubcat));
8. В файле текущего шаблона сайта компонента вывода текущего клуба templates\*******\components\com_clubs_view_club.tpl
выбираем место для вывода названия категории (в дальнейшем ссылка на список всех клубов этой категории)
((в нашем случае под названием клуба, а именно второй строкой свершу))
<div class="clubcat"><a href="cat{$clubcat_id}">{$clubcat}</a></div>
9. Разбиваем список клубов на две колонки. Правим файл color.css в вашем шаблоне
div.club_entry,
div.club_entry_vip{
border-bottom:1px solid #ccc;
}
заменяем на
div.club_entry,
div.club_entry_vip{
border-bottom:1px solid #ccc;
float: left;
width: 48%;
}
10. Правим файл router.php компонента клубы
после
добавляем
11. в файл frontend.php добавляем новое
12. Передаем список существующих категорий. В frontend.php
if ($do == 'create'){
после
$smarty->assign('confirm', $confirm);
добавим
$smarty->assign('clubcats', $model->getCatsList());
13. Добавляем сортировку по категории (model.php)
запрос
меняем на
14. Добавляем функцию получения списка существующих категорий (model.php)
15. Добавляем функцию получения названия категориии по её идентификатору (model.php)
16. Добавляем в функцию getClubs запрос на доп инфо (model.php)
while ($club = $this->inDB->fetch_assoc($rs)){
$clubs[] = $club;
}
заменяем на
while ($club = $this->inDB->fetch_assoc($rs)){
$club[cat_id] = $this ->getClubName($club[cat_id]);
$clubs[] = $club;
}
17. В шаблон вывода списка клубов (com_clubs_view.tpl) добавляем название категории, к которой принадлежит каждый клуб и ссылку на список всех клубов этой категории
после
<span class="members"><strong>{$club.members|spellcount:$LANG.USER:$LANG.USER2:$LANG.USER10}</strong></span>
добавляем
<span class="category"><strong><a href="/clubs/cat{$club.cat_id.id}">{$club.cat_id.cat_name}</a></strong></span>
Готово. Сделано для версии 1.8.
Буду рада, если кому-то пригодится, и еще раз прошу прощения за сумбурность изложения.
Что мне было нужно:
1. Добавить возможность выбора категории при создании клуба
2. Сделать, чтобы на странице клуба под названием ссылкой высвечивалась категория данного клуба, при нажатии на нее выводился список всех клубов данной категории.
Что для этого нужно изменить
1. Создаем новую таблицу с требующимися категориями клубов:
CREATE TABLE IF NOT EXISTS `cms_clubs_cat` ( `id` int(3) NOT NULL AUTO_INCREMENT, `cat_name` text NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=9 ; -- -- Dumping data for table `cms_clubs_cat` -- INSERT INTO `cms_clubs_cat` (`id`, `cat_name`) VALUES (1, 'Категория 1'), (2, 'Категория 2'), (3, 'Категория 3'), (4, 'Категория 4'), (5, 'Категория 5'), (6, 'Категория 6'), (7, 'Категория 7'), (8, 'Категория8');
3. В существующий файл шаблона (com_clubs_create.tpl) добавляем строку таблицы с новым элементом формы
<tr> <td><strong>{$LANG.SELECT_CLUB_CAT}: </strong></td> <td> <select name="clubcat" id="clubcat" style="width:300px"> <option value="{$clubcat.id}">{$clubcat.cat_name}</option> {/foreach} </select> </td> </tr> <tr>
$_LANG['SELECT_CLUB_CAT'] ='Выберите категорию конкурса';
в части //////////// CREATE CLUB /////////////////////
( if(!$errors) )
заменяем
$created_id = $model->addClub(array('user_id'=>$inUser->id, 'title'=>$title, 'clubtype'=>$clubtype, $cfg);
на
$created_id = $model->addClub(array('user_id'=>$inUser->id, 'title'=>$title, 'clubtype'=>$clubtype, 'clubcat'=>$clubcat), $cfg);
и после
$clubtype = $inCore->request('clubtype', 'str');
добавляем
$clubcat = $inCore->request('clubcat', 'str');
6. В файле components\clubs\model.php добавляем публичную функцию внутри класса cms_model_clubs
class cms_model_clubs{
бла-бла-бла
...
СЮДА!
}
public function getClubCat($catId) { $sql = "SELECT cat_name FROM cms_clubs_cat WHERE id = $catId"; // формируем запрос $result = $this->inDB->query($sql); // выполняем запрос if ($this->inDB->error()) { return false; } // Контролим ошибки if (!$this->inDB->num_rows($result)) { return false; } // если результат запроса пуст $result = $this->inDB->fetch_assoc($result); // загружаем в массив результат return $result[cat_name]; }
получаем значение поля cat_id
после
$pagetitle = $club['title'];
добавляем
$clubcat = $club['cat_id'];
и передаем в шаблон
после
$smarty->assign('pagetitle', $pagetitle);
добавляем
$smarty->assign('clubcat', $model->getClubCat($clubcat));
8. В файле текущего шаблона сайта компонента вывода текущего клуба templates\*******\components\com_clubs_view_club.tpl
выбираем место для вывода названия категории (в дальнейшем ссылка на список всех клубов этой категории)
((в нашем случае под названием клуба, а именно второй строкой свершу))
<div class="clubcat"><a href="cat{$clubcat_id}">{$clubcat}</a></div>
9. Разбиваем список клубов на две колонки. Правим файл color.css в вашем шаблоне
div.club_entry,
div.club_entry_vip{
border-bottom:1px solid #ccc;
}
заменяем на
div.club_entry,
div.club_entry_vip{
border-bottom:1px solid #ccc;
float: left;
width: 48%;
}
10. Правим файл router.php компонента клубы
после
'_uri' => '/^clubs\/page\-([0-9]+)$/i', 'do' => 'view', 1 => 'page' );
'_uri' => '/^clubs\/cat([0-9]+)$/i', 'do' => 'viewcat', 1 => 'cat_id' );
////////// VIEW ALL CLUBS CAT //////////////////////////////////////////////////////////////////////////////////////// if ($do=='viewcat'){ //PAGINATION $page = $inCore->request('page', 'int', 1); $cat_id = $inCore->request('cat_id', 'int'); $clubs_list = $model->getClubsCat($page, $perpage,$cat_id); $total = 0; if ($clubs_list){ foreach ($clubs_list as $club){ if (!$club['imageurl']) { $club['imageurl'] = 'nopic.jpg'; } else { $club['imageurl'] = 'nopic.jpg'; } } $clubs[] = $club; } $total = $model->getClubsCount(); } $smarty = $inCore->initSmarty('components', 'com_clubs_view.tpl'); $smarty->assign('pagetitle', $pagetitle); $smarty->assign('clubid', $id); // Ссылку на создание клуба показываем всем авторизованным $smarty->assign('can_create', $inUser->id); $smarty->assign('clubs', $clubs); $smarty->assign('total', $total); $smarty->assign('pagination', $pagination); $smarty->display('com_clubs_view.tpl'); }
if ($do == 'create'){
после
$smarty->assign('confirm', $confirm);
добавим
$smarty->assign('clubcats', $model->getCatsList());
13. Добавляем сортировку по категории (model.php)
запрос
$sql = "SELECT c.*, (COUNT(uc.user_id)+1) as members, c.pubdate as pubdate FROM cms_clubs c LEFT JOIN cms_user_clubs uc ON uc.club_id = c.id WHERE c.published = 1 GROUP BY c.id ORDER BY is_vip DESC, members DESC LIMIT ".(($page-1)*$perpage).", $perpage";
$sql = "SELECT c.*, (COUNT(uc.user_id)+1) as members, c.pubdate as pubdate FROM cms_clubs c LEFT JOIN cms_user_clubs uc ON uc.club_id = c.id WHERE c.published = 1 GROUP BY c.id ORDER BY cat_id ASC, is_vip DESC, members DESC LIMIT ".(($page-1)*$perpage).", $perpage";
public function getCatsList() { $sql = "SELECT * FROM cms_clubs_cat"; if (!$this->inDB->num_rows($rs)){ return false; } while ($cat = $this->inDB->fetch_assoc($rs)){ $cats[] = $cat; } $cats = cmsCore::callEvent('GET_CATSLIST', $cats); return $cats; }
public function getClubName($club_id) { global $_LANG; $sql = "SELECT * FROM cms_clubs_cat WHERE id = $club_id"; $result = $this->inDB->query($sql); if (!$this->inDB->num_rows($result)){ return false; } $club = $this->inDB->fetch_assoc($result); $club = cmsCore::callEvent('GET_CLUB', $club); return $club; }
while ($club = $this->inDB->fetch_assoc($rs)){
$clubs[] = $club;
}
заменяем на
while ($club = $this->inDB->fetch_assoc($rs)){
$club[cat_id] = $this ->getClubName($club[cat_id]);
$clubs[] = $club;
}
17. В шаблон вывода списка клубов (com_clubs_view.tpl) добавляем название категории, к которой принадлежит каждый клуб и ссылку на список всех клубов этой категории
после
<span class="members"><strong>{$club.members|spellcount:$LANG.USER:$LANG.USER2:$LANG.USER10}</strong></span>
добавляем
<span class="category"><strong><a href="/clubs/cat{$club.cat_id.id}">{$club.cat_id.cat_name}</a></strong></span>
Готово. Сделано для версии 1.8.
Буду рада, если кому-то пригодится, и еще раз прошу прощения за сумбурность изложения.
Реклама #
picaboo 12 лет назад #
bondar 12 лет назад #
Search 12 лет назад #
Очень неудобно! иногда не хочется посты писать из-за этой фичи.
Zau4man 12 лет назад #
nedoriko 12 лет назад #
засуну пока в закладки, может и пригодится.
Dexel 10 лет назад #
А скажите, какая задумка была в CSS:
PS. У меня версия 1.10.1, может в Вашей дизайн другой был
Петр 10 лет назад #