Мануал как добавить яндекс карты к топику
Многии задаются вопросом как добавить yandex какрту к топику чтобы можно было отмечать точки.
Такой вопрос встал и у меня после неудачного серфинга понял что прийдётся под свои нужды писать самому.
Я думаю многим будет интересно как я это сделал поэтому представляю список всех изменений что я вносил в код.
Оговорюсь сразу делал не через плагины а правил коды. Просто времени на изучение плагинов небыло.
И так приступим
1. В \classes\actions\ActionTopic.class.php после:
добавил:
после:
в 2-х местах (добавление и редактирование) добавил:
2. В \classes\modules\topic\entity\Topic.entity.class.php перед:
добавил:
и перед:
добавил:
3. В \classes\modules\topic\mapper\Topic.mapper.class.php добавил coodrinati сюда:
и сюда:
4. Выполнил запрос в базу:
5. Теперь начинаем править шаблоны: \templates\skin\synio\actions\ActionTopic\add.tpl
после:
Вставить
Путь до myscript.js можно менять сам файл вот тут: ссылка
6. Теперь сделаем вывод в топиках: \templates\skin\synio\topic_topic.tpl
после:
Вставляем:
В результате получил:
Хотите поддержать автора топика ?:
DONATE: http://livestreetcms.com/profile/Nick0/donate/
Такой вопрос встал и у меня после неудачного серфинга понял что прийдётся под свои нужды писать самому.
Я думаю многим будет интересно как я это сделал поэтому представляю список всех изменений что я вносил в код.
Оговорюсь сразу делал не через плагины а правил коды. Просто времени на изучение плагинов небыло.
И так приступим
1. В \classes\actions\ActionTopic.class.php после:
$_REQUEST['topic_title']=$oTopic->getTitle();
добавил:
$_REQUEST['coodrinati']=$oTopic->getCoodrinati();
после:
$oTopic->setTextSource(getRequest('topic_text'));
в 2-х местах (добавление и редактирование) добавил:
$oTopic->setCoodrinati(getRequest('coodrinati'));
2. В \classes\modules\topic\entity\Topic.entity.class.php перед:
public function getTags() {
return $this->_aData['topic_tags'];
}
добавил:
public function getCoodrinati() {
return $this->_aData['coodrinati'];
}
и перед:
public function setTextSource($data) {
$this->_aData['topic_text_source']=$data;
}
добавил:
public function setCoodrinati($data) {
$this->_aData['coodrinati']=$data;
}
3. В \classes\modules\topic\mapper\Topic.mapper.class.php добавил coodrinati сюда:
public function AddTopic(TopicEntity_Topic $oTopic) {
$sql = "INSERT INTO ".DB_TABLE_TOPIC."
(blog_id,
user_id,
topic_type,
topic_title,
coodrinati,
topic_tags,
topic_date_add,
topic_user_ip,
topic_publish,
topic_publish_draft,
topic_publish_index,
topic_cut_text,
topic_forbid_comment,
topic_text_hash
)
VALUES(?d, ?d, ?, ?, ?, ?, ?, ?, ?d, ?d, ?d, ?, ?, ?d, ?)
";
if ($iId=$this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getUserId(),$oTopic->getType(),$oTopic->getTitle(),$oTopic->getCoodrinati(),$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash()))
и сюда:
public function UpdateTopic(TopicEntity_Topic $oTopic) {
$sql = "UPDATE ".DB_TABLE_TOPIC."
SET
blog_id= ?d,
topic_title= ?,
coodrinati = ?,
topic_tags= ?,
topic_date_add = ?,
topic_date_edit = ?,
topic_user_ip= ?,
topic_publish= ?d ,
topic_publish_draft= ?d ,
topic_publish_index= ?d,
topic_rating= ?f,
topic_count_vote= ?d,
topic_count_read= ?d,
topic_count_comment= ?d,
topic_cut_text = ? ,
topic_forbid_comment = ? ,
topic_text_hash = ?
WHERE
topic_id = ?d
";
if ($this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getTitle(),$oTopic->getCoodrinati(),$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getDateEdit(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getRating(),$oTopic->getCountVote(),$oTopic->getCountRead(),$oTopic->getCountComment(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash(),$oTopic->getId())) {
4. Выполнил запрос в базу:
ALTER TABLE `prefix_topic` ADD `coodrinati` varchar(250) default NULL AFTER `topic_forbid_comment`
5. Теперь начинаем править шаблоны: \templates\skin\synio\actions\ActionTopic\add.tpl
после:
{hook run='form_add_topic_topic_end'}
Вставить
<script>
var vallmappa = '{$_aRequest.coodrinati}';
</script>
<script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU" type="text/javascript"></script>
<script src="/templates/skin/synio/actions/ActionTopic/myscript.js" type="text/javascript"></script>
<p><label for="topic_tags">Введите адрес и нажмите найти:</label>
<input type="text" class="input-text" id="yaserchinput" value="" style="width: 520px;"/>
<input type="button" id="yaserch" class="button" value="Найти"/></p>
<label for="topic_tags">Отметьте место на карте:</label>
<div id="map" style="width: 600px; height: 300px;margin-bottom: 10px;"></div>
Путь до myscript.js можно менять сам файл вот тут: ссылка
6. Теперь сделаем вывод в топиках: \templates\skin\synio\topic_topic.tpl
после:
{$oTopic->getText()}
Вставляем:
<script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU" type="text/javascript"></script>
<script type="text/javascript">
ymaps.ready(init);
function init () {
vallmappa = '{$oTopic->getCoodrinati()}';
perr = vallmappa.split(',');
var myMap = new ymaps.Map("map", {
center: [perr[0],perr[1]],
zoom: 16
});
myMap.controls.add('typeSelector').add('smallZoomControl', { left: 5, top: 75 });
myPlacemark = new ymaps.Placemark([perr[0],perr[1]]);
myMap.geoObjects.add(myPlacemark);
}
</script>
<div id="map" style=" float: left; width:100%; height:200px"></div>
В результате получил:
Хотите поддержать автора топика ?:
DONATE: http://livestreetcms.com/profile/Nick0/donate/
33 комментария
может подскажите такой момент: нужно чтобы эту геометку можно было ставить только при публикации топиков в определённый блог. в какую сторону смотреть и где править?)
Единственное почему бы просто в место
вставить
1d10t Может xtext для новой версии LS уже на подходе? :)
Попутный вопрос. Можно ли как-то сделать отдельную страницу, на которой будет отображаться список меток из всех топиков? Этакая карты объектов.
Catchable fatal error: Argument 1 passed to ModuleTopic_MapperTopic::AddTopic() must be an instance of TopicEntity_Topic, instance of PluginSkmapsimple_ModuleTopic_EntityTopic given, called in /home/p98654/www/mydvina.ru/classes/modules/topic/Topic.class.php on line 195 and defined in /home/p98654/www/mydvina.ru/classes/modules/topic/mapper/Topic.mapper.class.php on line 31
Не подскажите куда копать?