Ну чисто технически они сначала скачивают страницу, а потом показывают её пользователю. Если определить адреса, с которых они заходят - то можно их заблокировать будет.
В своё время запросы строил по этой статье про nested sets - http://www.getinfo.ru/article610.html
по-моему там всё хорошо пояснено с картинками и запросами.
В общем и целом то, что вам нужно, называется Entity-Attribute-Value EAV - для теоретического ознакомления советую по этому словосочетанию погуглить - как это всё делается и оптимизируется.
Если у вас php новее 5.5 - то там теперь по дефолту надо по-другому отправлять файлы.
Курите ман по опции CURLOPT_SAFE_UPLOAD тут http://php.net/manual/en/function.curl-setopt.php и http://php.net/manual/en/class.curlfile.php
Ну почему, можно статистикой.
Если уже есть база объявлений - то искать наиболее совпадающие по заголовку объявления и предлагать такие же категории, как и у них.
Если базы - нет - спарсить и аналогично. Ну и давать поменять категории, конечно. чтобы система могла "обучаться"
Например так https://tech.yandex.ru/maps/jsbox/2.1/direct_geocode
Я бы наверно Readability и модифицировал, корректируя по примерам страниц, где он не сработал
Немножко занимался данным вопросом, но вообще смотрел Readablity и его порт на php допиливал.
Была идея по отбрасыванию ненужного - выделять xpath элементов и смотреть, те, которые отличаются немного (индексами как правило) - меню всякие отсекать, у которых структура одинаковая.
Еще в мозилле была кнопка (от элементов яндекса вроде, но могу ошибаться) в адресной строке - она тоже версию для чтения делала неплохо (но я особо не тестил) - но как она внутри устроена - не знаю.
Первая ссылка в гугле http://zudochkin.ru/2011/03/uploading-files-using-curl-php/
у вас вместо $postData['image'] будет $postData['file'], с остальным по аналогии.
если сильно надо - можно заморочиться с ReflectionProperty http://php.net/manual/ru/reflectionproperty.getvalue.php
А, не сразу заметил, что вы внутри шаблона smarty, там-то без допиливания рефлексию не используешь.
Судя по всему. у вас в этом шаблоне есть переменная $product класса shopProduct - я бы посмотрел какие у этого класса есть методы, чтоб вывести id.
Но вообще информации маловато для ответа.