madison21 Posted October 3, 2019 Report Share Posted October 3, 2019 Читал ветку на сайте здесьНо там решения так и не получили рабочего.Может у кого есть для симплы решение как генерить карту сайта для изображений? Quote Link to post Share on other sites
Noxter Posted October 3, 2019 Report Share Posted October 3, 2019 У меня есть готовое решение. Quote Link to post Share on other sites
alexivchenko Posted October 3, 2019 Report Share Posted October 3, 2019 (edited) <?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 October 3, 2019 by alexivchenko Quote Link to post Share on other sites
phukortsin Posted October 3, 2019 Report Share Posted October 3, 2019 Работать, видимо будет. Но в целом тихий ужас. Смесь понадерганного откуда-то, должно, без особого понятия. Если первый запрос упростить, убрав ненужные там варианты, то и второй можно сократить и сэкономить... Quote Link to post Share on other sites
Noxter Posted October 3, 2019 Report Share Posted October 3, 2019 <?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>"; ?> Вот из-за таких криворуких "кодеров" всё больше проблем появляется у клиентов. Quote Link to post Share on other sites
alexivchenko Posted October 3, 2019 Report Share Posted October 3, 2019 Вот из-за таких криворуких "кодеров" всё больше проблем появляется у клиентов. Я не кодер, а лишь собрал из того, что нашел в посте http://forum.simplacms.ru/topic/4543-генерация-sitemap-для-картинок/ и генерация вывода yandex.php и вроде работает. Да дублирует вывод, если у товара есть варианты.Вместо того, чтобы набирать счетчик количества бестолковых символов, подправили бы код. Quote Link to post Share on other sites
Noxter Posted October 3, 2019 Report Share Posted October 3, 2019 Я не кодер, а лишь собрал из того, что нашел в посте http://forum.simplacms.ru/topic/4543-генерация-sitemap-для-картинок/ и генерация вывода yandex.php и вроде работает. Да дублирует вывод, если у товара есть варианты. Вместо того, чтобы набирать счетчик количества бестолковых символов, подправили бы код.Вот именно не кодер! На кой чёрт браться, сделать лишь бы как, как минимум удвоить кол-во запросов к БД и радоваться что у тебя работает? Идиотизм... Quote Link to post Share on other sites
alexivchenko Posted October 3, 2019 Report Share Posted October 3, 2019 (edited) Вот именно не кодер!На кой чёрт браться, сделать лишь бы как, как минимум удвоить кол-во запросов к БД и радоваться что у тебя работает?Идиотизм...Дядь, а так? <?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 October 3, 2019 by alexivchenko Quote Link to post Share on other sites
chocolate_moles Posted October 3, 2019 Report Share Posted October 3, 2019 (edited) <?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 October 3, 2019 by chocolate_moles Quote Link to post Share on other sites
madison21 Posted October 3, 2019 Author Report Share Posted October 3, 2019 Большое спасибо за помошь Chocolate Moles и alexivchenko А никто не знает как внедрить сюда название фотографии? <image:title>...</image:title> Quote Link to post Share on other sites
Noxter Posted October 3, 2019 Report Share Posted October 3, 2019 Большое спасибо за помошь Chocolate Moles и alexivchenko А никто не знает как внедрить сюда название фотографии? <image:title>...</image:title> $image->addChild('image:title', $p->name, 'http://www.google.com/schemas/sitemap-image/1.1'); Quote Link to post Share on other sites
madison21 Posted October 3, 2019 Author Report Share Posted October 3, 2019 Noxterу отдельная благодарность за добавочку, всё сработало как надо! У alexivchenko вариант хорош тем, что генерятся оригинальные фотки большого размера (хотя по правде не знаю как лучше оригинальные фотки или обработанные уменьшенные) В итоге использовал вариант Chocolate Moles тем более с добавочкой title получилось то что доктор прописал Всем большое спасибо за помощь и участие! Quote Link to post Share on other sites
alexivchenko Posted October 3, 2019 Report Share Posted October 3, 2019 <?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> и добавляет название варианта Quote Link to post Share on other sites
madison21 Posted October 3, 2019 Author Report Share Posted October 3, 2019 Спасибо, Алексей.Буду иметь и Вашу добавочку в виду. Quote Link to post Share on other sites
Noxter Posted October 3, 2019 Report Share Posted October 3, 2019 Quote Link to post Share on other sites
get31 Posted October 26, 2021 Report Share Posted October 26, 2021 (edited) Подскажите пожалуйста, как в image:title вывести нумерацию $level? Если фото больше чем 1, вывод: <image:title>Название товара фото 2[3,4,5....]</image:title> Edited October 26, 2021 by get31 Quote Link to post Share on other sites
get31 Posted October 29, 2021 Report Share Posted October 29, 2021 В 26.10.2021 в 15:41, get31 сказал: Подскажите пожалуйста, как в image:title вывести нумерацию $level? Если фото больше чем 1, вывод: <image:title>Название товара фото 2[3,4,5....]</image:title> Кому надо: $level = 1; .htmlspecialchars($level++). Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.