Jump to content

Recommended Posts


<?php

require_once('api/Simpla.php');
$simpla = new Simpla();

header("Content-type: text/xml; charset=UTF-8");
print '<?xml version="1.0" encoding="UTF-8"?>'."\n";
// Заголовок
print '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">'."\n";

$simpla->db->query("SET SQL_BIG_SELECTS=1");
// Товары
$simpla->db->query("SELECT
p.id AS product_id,
p.url,
i.filename AS image
FROM __variants v
LEFT JOIN __products p ON v.product_id = p.id
LEFT JOIN __images i ON p.id = i.product_id
WHERE p.visible
GROUP BY v.id
ORDER BY p.id");

$products = $simpla->db->results();
$p_ids = array();
foreach ($products as $p) {
if (!in_array($p->product_id, $p_ids)) {
$p_ids[] = $p->product_id;
}
}
$p_images = array();
foreach($simpla->products->get_images(array('product_id' => $p_ids)) as $image) {
$p_images[$image->product_id][] = $image->filename;
}

foreach($products as $p) {
print "<url>
<loc>".$simpla->config->root_url.'/products/'.$p->url."</loc>";
if(!empty($p_images[$p->product_id])) {
foreach($p_images[$p->product_id] as $img) {
print "
<image:image>
<image:loc>".$simpla->design->resize_modifier($img, 800, 600)."</image:loc>";
print "</image:image>";
}
}
print "</url>";
}
print "</urlset>";
?>
Edited by alexivchenko
Link to post
Share on other sites

Работать, видимо будет.

Но в целом тихий ужас. Смесь понадерганного откуда-то, должно, без особого понятия.

Если первый запрос упростить, убрав ненужные там варианты, то и второй можно сократить и сэкономить...

Link to post
Share on other sites

 

 

<?php

require_once('api/Simpla.php');
$simpla = new Simpla();

header("Content-type: text/xml; charset=UTF-8");
print '<?xml version="1.0" encoding="UTF-8"?>'."\n";
// Заголовок
print '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">'."\n";

$simpla->db->query("SET SQL_BIG_SELECTS=1"); 
// Товары
$simpla->db->query("SELECT 
	p.id AS product_id, 
	p.url, 
	i.filename AS image	
FROM __variants v
LEFT JOIN __products p ON v.product_id = p.id
LEFT JOIN __images i ON p.id = i.product_id  
WHERE p.visible
GROUP BY v.id
ORDER BY p.id");

$products = $simpla->db->results();
$p_ids = array();
foreach ($products as $p) {
    if (!in_array($p->product_id, $p_ids)) {
        $p_ids[] = $p->product_id;
    }
}
$p_images = array();
foreach($simpla->products->get_images(array('product_id' => $p_ids)) as $image) {
    $p_images[$image->product_id][] = $image->filename;
}

foreach($products as $p) {
print "<url>
<loc>".$simpla->config->root_url.'/products/'.$p->url."</loc>";
if(!empty($p_images[$p->product_id])) {
	foreach($p_images[$p->product_id] as $img) {
    print "
	<image:image>
	<image:loc>".$simpla->design->resize_modifier($img, 800, 600)."</image:loc>";
	print "</image:image>";
    }
}
print "</url>";
}
print "</urlset>";
?>

 

 

Вот из-за таких криворуких "кодеров" всё больше проблем появляется у клиентов.
Link to post
Share on other sites

Вот из-за таких криворуких "кодеров" всё больше проблем появляется у клиентов.

 

Я не кодер, а лишь собрал из того, что нашел в посте http://forum.simplacms.ru/topic/4543-генерация-sitemap-для-картинок/ и генерация вывода yandex.php и вроде работает. Да дублирует вывод, если у товара есть варианты.

Вместо того, чтобы набирать счетчик количества бестолковых символов, подправили бы код. 

Link to post
Share on other sites

Я не кодер, а лишь собрал из того, что нашел в посте http://forum.simplacms.ru/topic/4543-генерация-sitemap-для-картинок/ и генерация вывода yandex.php и вроде работает. Да дублирует вывод, если у товара есть варианты.

Вместо того, чтобы набирать счетчик количества бестолковых символов, подправили бы код.

Вот именно не кодер!

На кой чёрт браться, сделать лишь бы как, как минимум удвоить кол-во запросов к БД и радоваться что у тебя работает?

Идиотизм...

Link to post
Share on other sites

Вот именно не кодер!

На кой чёрт браться, сделать лишь бы как, как минимум удвоить кол-во запросов к БД и радоваться что у тебя работает?

Идиотизм...

Дядь, а так? 

 

<?php

require_once('api/Simpla.php');
$simpla = new Simpla();

header("Content-type: text/xml; charset=UTF-8");
print '<?xml version="1.0" encoding="UTF-8"?>'."\n";
// Заголовок
print '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">'."\n";

$simpla->db->query("SET SQL_BIG_SELECTS=1"); 
// Товары
$simpla->db->query("SELECT
	v.id as variant_id, 
	p.id AS product_id, 
	p.url 
FROM __variants v
LEFT JOIN __products p ON v.product_id = p.id
WHERE p.visible
GROUP BY v.id
ORDER BY p.id");


$products = $simpla->db->results();
$prev_product_id = null;

foreach($products as $p) {
print "<url>
";	
//тут массив с картинками
$p_images = array();
foreach($simpla->products->get_images(array('product_id' => $p->product_id)) as $image) {
    $p_images[$image->product_id][] = $image->filename;
}	

$variant_url = '';
if ($prev_product_id === $p->product_id)
	$variant_url = '?variant='.$p->variant_id;
$prev_product_id = $p->product_id;

	
print "<loc>".$simpla->config->root_url.'/products/'.$p->url.$variant_url."</loc>";
//выводим картинки
	if(!empty($p_images[$p->product_id])) {
		foreach($p_images[$p->product_id] as $img) {
			$string =  htmlspecialchars($simpla->config->root_url.'/files/originals/'.$img);
			print "
			<image:image>
			<image:loc>".$string."</image:loc>";
			print "</image:image>";
		}
	}
print "</url>
";
}

print "</urlset>
";
?>

Выводит оригинальные картинки к товару, а если у товара есть варианты, то и номер варианта добавляет к ссылке

Edited by alexivchenko
Link to post
Share on other sites


<?php
require_once('api/Simpla.php');

class Map extends Simpla
{
function fetch()
{
$urlset = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" />');

$this->db->query("
SELECT
p.url, p.name, GROUP_CONCAT(i.filename SEPARATOR ',') AS images
FROM
__products p
RIGHT JOIN
__images i ON i.product_id = p.id
GROUP by p.id
");

$products = $this->db->results();

foreach($products as $p)
{
$url = $urlset->addChild('url');
$url->addChild('loc', $this->config->root_url . '/products/' . $p->url);

foreach(explode(',', $p->images) as $filename)
{
$image = $url->addChild('image:image', null, 'http://www.google.com/schemas/sitemap-image/1.1');
$image->addChild('image:loc', $this->design->resize_modifier($filename, 800, 600), 'http://www.google.com/schemas/sitemap-image/1.1');
}
}

return $urlset->asXML();
}
}

$map = new Map();
$result = $map->fetch();

header("Content-type: text/xml; charset=UTF-8");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: -1");
print $result;
exit;

 

Edited by chocolate_moles
Link to post
Share on other sites

Большое спасибо за помошь Chocolate Moles и alexivchenko

 

А никто не знает как внедрить сюда название фотографии?

 

<image:title>...</image:title>

$image->addChild('image:title', $p->name, 'http://www.google.com/schemas/sitemap-image/1.1');
Link to post
Share on other sites

Noxterу отдельная благодарность за добавочку, всё сработало как надо!

 

У alexivchenko вариант хорош тем, что генерятся оригинальные фотки большого размера (хотя по правде не знаю как лучше оригинальные фотки или обработанные уменьшенные)

 

В итоге использовал вариант Chocolate Moles тем более с добавочкой title получилось то что доктор прописал   :) 

 

Всем большое спасибо за помощь и участие!

Link to post
Share on other sites
<?php

require_once('api/Simpla.php');
$simpla = new Simpla();

header("Content-type: text/xml; charset=UTF-8");
print '<?xml version="1.0" encoding="UTF-8"?>'."\n";
// Заголовок
print '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">'."\n";

$simpla->db->query("SET SQL_BIG_SELECTS=1"); 
// Товары
$simpla->db->query("SELECT
	v.id as variant_id, 
	p.id AS product_id,
	p.name as product_name,
	v.name as variant_name,	
	p.url 
FROM __variants v
LEFT JOIN __products p ON v.product_id = p.id
WHERE p.visible
GROUP BY v.id
ORDER BY p.id");


$products = $simpla->db->results();
$prev_product_id = null;

foreach($products as $p) {
print "<url>
";	
//тут массив с картинками
$p_images = array();
foreach($simpla->products->get_images(array('product_id' => $p->product_id)) as $image) {
    $p_images[$image->product_id][] = $image->filename;
}	

$variant_url = '';
if ($prev_product_id === $p->product_id)
	$variant_url = '?variant='.$p->variant_id;
$prev_product_id = $p->product_id;

	
print "<loc>".$simpla->config->root_url.'/products/'.$p->url.$variant_url."</loc>";
//выводим картинки
	if(!empty($p_images[$p->product_id])) {
		foreach($p_images[$p->product_id] as $img) {
			$string =  htmlspecialchars($simpla->config->root_url.'/files/originals/'.$img);
			print "
			<image:image>
			<image:loc>".$string."</image:loc>";
			print "<image:title>".htmlspecialchars($p->product_name).($p->variant_name?' '.htmlspecialchars($p->variant_name):'')."</image:title>";
			print "</image:image>";
		}
	}
print "</url>
";
}

print "</urlset>
";
?>

Выводит <image:title> и добавляет название варианта 

Link to post
Share on other sites
  • 2 years later...

Подскажите пожалуйста, как в image:title вывести нумерацию $level?

Если фото больше чем 1, вывод: <image:title>Название товара фото 2[3,4,5....]</image:title>

Edited by get31
Link to post
Share on other sites
В 26.10.2021 в 15:41, get31 сказал:

Подскажите пожалуйста, как в image:title вывести нумерацию $level?

Если фото больше чем 1, вывод: <image:title>Название товара фото 2[3,4,5....]</image:title>

Кому надо:

$level = 1;
.htmlspecialchars($level++).

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...