21 октября 2009

Переработки AdsManager (часть 1)

При работе над одним проектом понадобилось сделать несколько переработок AdsManager'а.

I
Первое, что было необходимо, чтобы товары показывались именно в той категории, где они находятся, а не в какой-либо родительской или иной. В конфигурациях данного свойства не было, поэтому пришлось лезть в код и править там.
В файле components/com_adsmanager/adsmanager.html.php ищем функцию show_list, в global добавляем параметр $database (мы же будем анализировать, в какой категории сейчас находимся и выводить или нет нам товар, а переменная для подключения к БД):
global $mosConfig_live_site,$mosConfig_absolute_path,$mosConfig_live_site,$my,$database;

Дальше примерно после 390 строки, ниже этого куска кода:
<?php adsmanager_html::showGeneralLink($option,$itemid,$catid,$conf->comprofiler); ?>
<br />
<?php

вставляем свой код для подключения к БД:
$database->setQuery( "SELECT COUNT(*) FROM #__adsmanager_categories WHERE parent='".$catid."' ");
$total_cats = $database->loadResult();

Заметим, что используем запрос с parent='".$catid."' — он служит кдля определения, того находимся мы в родительской категории или мы уже в категории, где этот товар лежит.
После этого вставляем следующий код:
if ($total_cats>1){ echo ''; }
else {

Думаю, что тут все понятно :)
Только не забудьте закрыть фигурную скобку (у меня она закрывается на 552 строке).

II
В пакет AdsManager'а входит модуль, который показывает последний объявления в разном порядке (случайно, последние и популярные — вроде так :) ), но была проблема в том, что надо было сделать так, чтобы модуль отображался по вертикали, только картинкой с названием и ширина картинки не превышала ширины левой колонки (см. сайт), вроде бы все просто, в коде модуля можно прописать жёстко ширину для изображения (допустим, 190px) и дело сделано, все картинки будут одинаковой… как бы не так! У нас же еще есть и картинки, у которых ширина меньше 190 и при фиксации они будут выглядеть ужасно…
Что же, тогда делаем следующем образом!
После строки 71-72
if (file_exists( $pic)) 
{

вставляем следующий код:
list($width, $height, $type, $attr) = getimagesize($pic);
if ($width>189) $wdt='width=190'; else $wdt=''; 
echo "<div align='center'><a href='".$linkTarget."'><img src='".$mosConfig_live_site."/images/com_adsmanager/ads/".$row->id.$ext_name.".jpg' alt='".htmlspecialchars(stripslashes($row->ad_headline),ENT_QUOTES)."' border='0' ".$wdt." /></a>";

Итак, поясняю:
1. list($width, $height, $type, $attr) = getimagesize($pic); — это функция вытаскивает из изображения его параметры (ширина, высота, тип и аттрибуты), $pic — ссылка на изображение, она задана выше в коде.
2. if ($width>189) $wdt='width=190'; else $wdt=''; — тут мы определяем, что если ширина картинки больше 189 пикс, то мы фиксируем ширину и ставим её равную 190 пикс, иначе ничего не делаем.
3. echo… — тут все просто (и ясно), просто в код для изображения вставляем параметр ширины (".$wdt.") :)

III (добавлено чуть позже)
Так же возникла проблема с загрузкой файлов. Почему-то в версии 2.5RC2 файлы загружаются, но не записываются в БД (имя файла не записывается). Спасибо джумлафоруму — нашел там решение, делюсь тут же.
В файле administrator\components\com_adsmanager\admin.adsmanager.php в функции saveAd после
@move_uploaded_file($_FILES[$field->name]['tmp_name'], $mosConfig_absolute_path."/images/com_adsmanager/files/".$filename);

вставляем код
if ($first == 0)
               $query .= "SET"; 
            else
               $query .= ",";
            $first = 1;
            $query .= " $field->name = '".$filename."' ";

вот и все…
о чем думали разработчики? ХЗ…

Продолжение следует…
0

Комментарии:3

avatar
Посмотрел «большой проект». Обычный каталог.
Каталог товаров делают из SOBI2 и AdsManager…
Я не пойму, чем не нравится людям VirtueMart? Он же для этого и создан. Это что, менталитет народа «забивать гвозди рубанком».
Не, это конечно моё мнение…

Ну и:
citadel-pro.ru/component/option,com_adsmanager/page,show_ad/adid,13/catid,48/Itemid,26/
Название (Тип «Контур») обрамляем «ёлочкой», в тексте ловим «экран» (отечественные: \\\«Сам-799\\\»)
avatar
Virtuemart не удобный, громозкий.
Да, «экраны» остались в некоторых местах.
Большой, т.к. возимся с ним долго и доработок оч много. Может и неправильно назвал, но уж простите
avatar
  • klinkoff
  • 11 января 2012, 20:14
  • 0
Всем привет. Я много компонентов «досок» перебрал, но… ничего кроме АdsManager, мне не понравилось. Вот то, что у меня получилось: www.slavboard.com.ua. Кое-что правда пришлось изменить, доработать… благодаря Вашему сайту в том числе. Спасибо!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.