madison21 Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 3 октября, 2019 Читал ветку на сайте здесьНо там решения так и не получили рабочего.Может у кого есть для симплы решение как генерить карту сайта для изображений? Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 3 октября, 2019 У меня есть готовое решение. Цитата Ссылка на сообщение Поделиться на другие сайты
alexivchenko Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 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>"; ?> Изменено 3 октября, 2019 пользователем alexivchenko Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 3 октября, 2019 Работать, видимо будет. Но в целом тихий ужас. Смесь понадерганного откуда-то, должно, без особого понятия. Если первый запрос упростить, убрав ненужные там варианты, то и второй можно сократить и сэкономить... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 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>"; ?> Вот из-за таких криворуких "кодеров" всё больше проблем появляется у клиентов. Цитата Ссылка на сообщение Поделиться на другие сайты
alexivchenko Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 3 октября, 2019 Вот из-за таких криворуких "кодеров" всё больше проблем появляется у клиентов. Я не кодер, а лишь собрал из того, что нашел в посте http://forum.simplacms.ru/topic/4543-генерация-sitemap-для-картинок/ и генерация вывода yandex.php и вроде работает. Да дублирует вывод, если у товара есть варианты.Вместо того, чтобы набирать счетчик количества бестолковых символов, подправили бы код. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 3 октября, 2019 Я не кодер, а лишь собрал из того, что нашел в посте http://forum.simplacms.ru/topic/4543-генерация-sitemap-для-картинок/ и генерация вывода yandex.php и вроде работает. Да дублирует вывод, если у товара есть варианты. Вместо того, чтобы набирать счетчик количества бестолковых символов, подправили бы код.Вот именно не кодер! На кой чёрт браться, сделать лишь бы как, как минимум удвоить кол-во запросов к БД и радоваться что у тебя работает? Идиотизм... Цитата Ссылка на сообщение Поделиться на другие сайты
alexivchenko Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 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.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> "; ?> Выводит оригинальные картинки к товару, а если у товара есть варианты, то и номер варианта добавляет к ссылке Изменено 3 октября, 2019 пользователем alexivchenko Цитата Ссылка на сообщение Поделиться на другие сайты
chocolate_moles Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 3 октября, 2019 (изменено) <?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; Изменено 3 октября, 2019 пользователем chocolate_moles Цитата Ссылка на сообщение Поделиться на другие сайты
madison21 Опубликовано 3 октября, 2019 Автор Жалоба Поделиться Опубликовано 3 октября, 2019 Большое спасибо за помошь Chocolate Moles и alexivchenko А никто не знает как внедрить сюда название фотографии? <image:title>...</image:title> Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 3 октября, 2019 Большое спасибо за помошь Chocolate Moles и alexivchenko А никто не знает как внедрить сюда название фотографии? <image:title>...</image:title> $image->addChild('image:title', $p->name, 'http://www.google.com/schemas/sitemap-image/1.1'); Цитата Ссылка на сообщение Поделиться на другие сайты
madison21 Опубликовано 3 октября, 2019 Автор Жалоба Поделиться Опубликовано 3 октября, 2019 Noxterу отдельная благодарность за добавочку, всё сработало как надо! У alexivchenko вариант хорош тем, что генерятся оригинальные фотки большого размера (хотя по правде не знаю как лучше оригинальные фотки или обработанные уменьшенные) В итоге использовал вариант Chocolate Moles тем более с добавочкой title получилось то что доктор прописал Всем большое спасибо за помощь и участие! Цитата Ссылка на сообщение Поделиться на другие сайты
alexivchenko Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 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> и добавляет название варианта Цитата Ссылка на сообщение Поделиться на другие сайты
madison21 Опубликовано 3 октября, 2019 Автор Жалоба Поделиться Опубликовано 3 октября, 2019 Спасибо, Алексей.Буду иметь и Вашу добавочку в виду. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 3 октября, 2019 Жалоба Поделиться Опубликовано 3 октября, 2019 Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 26 октября, 2021 Жалоба Поделиться Опубликовано 26 октября, 2021 (изменено) Подскажите пожалуйста, как в image:title вывести нумерацию $level? Если фото больше чем 1, вывод: <image:title>Название товара фото 2[3,4,5....]</image:title> Изменено 26 октября, 2021 пользователем get31 Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 29 октября, 2021 Жалоба Поделиться Опубликовано 29 октября, 2021 В 26.10.2021 в 15:41, get31 сказал: Подскажите пожалуйста, как в image:title вывести нумерацию $level? Если фото больше чем 1, вывод: <image:title>Название товара фото 2[3,4,5....]</image:title> Кому надо: $level = 1; .htmlspecialchars($level++). Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.