Перейти к содержимому


Фото
- - - - -

Карта сайта для изображений


  • Чтобы отвечать, сперва войдите на форум
14 ответов в теме

#1 madison21

madison21
  • Пользователь
  • 205 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 03.10.2019 - 12:13

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



#2 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 229 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 03.10.2019 - 12:17

У меня есть готовое решение.

#3 alexivchenko

alexivchenko
  • Пользователь
  • 34 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 03.10.2019 - 12:58

<?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, 03.10.2019 - 13:26


#4 phukortsin

phukortsin
  • Фрилансер
  • 931 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 03.10.2019 - 14:38

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

#5 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 229 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 03.10.2019 - 15:06


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


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

#6 alexivchenko

alexivchenko
  • Пользователь
  • 34 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 03.10.2019 - 15:31

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

 

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

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



#7 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 229 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 03.10.2019 - 16:12

Я не кодер, а лишь собрал из того, что нашел в посте http://forum.simplac...p-для-картинок/ и генерация вывода yandex.php и вроде работает. Да дублирует вывод, если у товара есть варианты.
Вместо того, чтобы набирать счетчик количества бестолковых символов, подправили бы код.

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

#8 alexivchenko

alexivchenko
  • Пользователь
  • 34 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 03.10.2019 - 16:28

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

Дядь, а так? 

 

<?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, 03.10.2019 - 16:33


#9 chocolate_moles

chocolate_moles
  • Фрилансер
  • 483 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 03.10.2019 - 17:19

<?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, 03.10.2019 - 17:29


#10 madison21

madison21
  • Пользователь
  • 205 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 03.10.2019 - 18:55

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

 

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

 

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



#11 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 229 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 03.10.2019 - 20:09

Большое спасибо за помошь Chocolate Moles и alexivchenko
 
А никто не знает как внедрить сюда название фотографии?
 
<image:title>...</image:title>

$image->addChild('image:title', $p->name, 'http://www.google.com/schemas/sitemap-image/1.1');


#12 madison21

madison21
  • Пользователь
  • 205 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 03.10.2019 - 22:40

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

 

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

 

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

 

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



#13 alexivchenko

alexivchenko
  • Пользователь
  • 34 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 03.10.2019 - 23:41

<?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> и добавляет название варианта 



#14 madison21

madison21
  • Пользователь
  • 205 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 03.10.2019 - 23:46

Спасибо, Алексей.
Буду иметь и Вашу добавочку в виду.



#15 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 229 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 04.10.2019 - 00:51

[sharedmedia=core:attachments:1708]




0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых