Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Читал ветку на сайте здесь
Но там решения так и не получили рабочего.
Может у кого есть для симплы решение как генерить карту сайта для изображений?

Ссылка на сообщение
Поделиться на другие сайты

<?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>";
?>
Изменено пользователем alexivchenko
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

 

 

<?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>";
?>

 

 

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

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

 

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Идиотизм...

Ссылка на сообщение
Поделиться на другие сайты

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

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

Идиотизм...

Дядь, а так? 

 

<?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>
";
?>

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

Изменено пользователем alexivchenko
Ссылка на сообщение
Поделиться на другие сайты


<?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;

 

Изменено пользователем chocolate_moles
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

$image->addChild('image:title', $p->name, 'http://www.google.com/schemas/sitemap-image/1.1');
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
<?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> и добавляет название варианта 

Ссылка на сообщение
Поделиться на другие сайты
  • 2 года спустя...

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

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

Изменено пользователем get31
Ссылка на сообщение
Поделиться на другие сайты
В 26.10.2021 в 15:41, get31 сказал:

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

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

Кому надо:

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

 

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...