PDA

View Full Version : Тех. вопрос по плагину Google/Yahoo Sitemap


mgarkunov
02-05-2009, 09:52 PM
В плагине есть код, который отвечает за генерацию адресов листингов для Sitemap.xml
if(!empty($listings))
{
// Build the Sitemap part for each link.

foreach ($listings as $one)
{
if('google' == $_GET['service'])
{
$feed.= '<url><loc>'.ESYN_URL;
if (ESYN_MOD_REWRITE)
{
$one['title'] = esynSanitize::convertStr($one['title']);
$feed.= esynCategory::getPath($one['path'],$one['title']).'-l'.$one['id'].'.html';
}
else
{
$feed.= 'view-listing.php?id='.$one['id'];
}
$feed.= '</loc><changefreq>'.$GSM['link']['changefreq'].'</changefreq>';
$feed.= '<priority>'.$GSM['link']['priority'].'</priority></url>'."\n";
}
elseif('yahoo' == $_GET['service'])
{
$feed.= ESYN_URL;
if (ESYN_MOD_REWRITE)
{
$feed.= esynCategory::getPath($one['path'],$one['title']).'-l'.$one['id'].'.html'."\n";
}
else
{
$feed.= 'view-listing.php?id='.$one['id']."\n";
}
}
}
}
Мне нужно изменить $one['title'] на $one['furl'], так как именно поле "furl" у меня подставляется вместо "title" при генерации адреса.
Но мои попытки не приводят не к чему.
Если я убираю строчку $one['title'] = esynSanitize::convertStr($one['title']);
И исправляю на "furl", то нечего не получаю в адресе.
Если строчку конвертации не убираю, а просто изменяю значение, то вместо значения поля получаю "listings"

Как это можно исправить.
P.S. Я знаю php с краешку, поэтому прошу дать развернутый ответ :)

Simon Gooffin
02-06-2009, 05:04 AM
Привет

Вам нужно копать в сторону метода класса esynListing.


/**
* Return array of links with ID
*
* @return arr
*/
function getSitemapListings()
{
$sql = "SELECT `cat`.`path`, `link`.`id` `id`, `link`.`title` ";
$sql .= "FROM `".$this->mPrefix."categories` AS `cat` ";
$sql .= "LEFT JOIN `".$this->mTable."` AS `link` ";
$sql .= "ON `link`.`category_id` = `cat`.`id` ";
$sql .= "WHERE `cat`.`status` = 'active' AND `cat`.`id` > '0' ";
$sql .= "AND `link`.`status` = 'active' ";
$sql .= "ORDER BY `cat`.`id`";

return $this->getAll($sql);
}


Дело в том, что он не выгребает значение полей, которые Вы используете ) Добавьте его в метод и voila ;)

mgarkunov
02-07-2009, 05:37 AM
Нашел более простой способ, а именно передать в массив $listings другие данные.
В плагина есть код для выбора страниц
$esynDb->setTable("pages");
$sql = "SELECT `id`,`name`,`menus`,`order`,`unique_url`,`non_modr ewrite_url`,`nofollow` ";
$sql .= "FROM ".$esynDb->mPrefix."pages ";
$sql .= "WHERE `status` = 'active' ";
$sql .= " AND `name` NOT IN ('home', 'search', 'new-listings', 'top-listing', 'popular-listings', 'random-listings', 'suggest-listing', 'suggest-category', 'account-listings', 'favorites-listings', 'edit_account') ";
$sql .= "ORDER BY `order`";
$pages = $esynDb->getAll($sql);
На основе его сделал переопределение $listings и в итоге получилось
$esynDb->resetTable();
$esynDb->setTable("listings");
$sql = "SELECT `id`,`title`,`furl`";
$sql .= "FROM ".$esynDb->mPrefix."listings ";
$sql .= "WHERE `status` = 'active' ";
$sql .= "ORDER BY `id`";
$listings = $esynDb->getAll($sql);
$esynDb->resetTable();

В итоге получил требуемый результат :)

P.S. Можно также удалить или закомментировать строчку 42 в коде, где происходит передача массива в переменную $listings

mgarkunov
02-09-2009, 07:03 AM
В предыдущем посте была ошибка в запросе.
Правильный запрос.
$esynDb->resetTable();
$sql = "SELECT `t1`.`title`,`t1`.`furl`, `t1`.`id`, `t1`.`url`, `t2`.`path` FROM `{$esynDb->mPrefix}listings` `t1` ";
$sql .= "LEFT JOIN `{$esynDb->mPrefix}categories` `t2` ";
$sql .= "ON `t1`.`category_id` = `t2`.`id` ";
$sql .= "WHERE `t1`.`status` = 'active' ";
$sql .= "ORDER BY `t1`.`comments_active` DESC ";
$listings = $esynDb->getAll($sql);
$esynDb->resetTable();