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

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

Стандарт гугловский для xml файла изображений следующий:

<?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">
 
 <url>
   <loc>http://example.com/sample.html</loc>
   
   <image:image>
     <image:loc>http://example.com/image.jpg</image:loc>
    
   </image:image>
   <image:image>
     <image:loc>http://example.com/photo.jpg</image:loc>
   
   </image:image>
 </url> 
</urlset> 

 

 

А так выглядит html код картинки на сайте


<img src="http://domen.ru/files/products/748925.150x150.jpg?c37ad9ed65348c2896471a3332639244" alt="Ноутбук ">

 

 

 

Как спрашивается скриптом генерить карту сайта для таких картинок, если в базе имя файла - таблица s_images имеет поле filename и значение, равное - p1513_298963_kommutator_hp_jd853a_v1405c_5_5_port_5x10100base_tx_.jpg

 

Кароче как сгенерить знаю, не знаю как путь до картинки получить!!!

Ссылка на сообщение
Поделиться на другие сайты
  • 4 недели спустя...
<?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"?>
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">';

// Товары
$simpla->db->query("SET SQL_BIG_SELECTS=1");
// Товары
$simpla->db->query("SELECT v.price, v.id as variant_id, p.name as product_name, v.name as variant_name, v.position as variant_position, p.id as product_id, p.url, p.annotation, pc.category_id, i.filename as image
					FROM __variants v LEFT JOIN __products p ON v.product_id=p.id
					
					LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1)	
					LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1)	
					WHERE p.visible AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id ORDER BY p.id, v.position ");


// В цикле мы используем не results(), a result(), то есть выбираем из базы товары по одному,
// так они нам одновременно не нужны - мы всё равно сразу же отправляем товар на вывод.
// Таким образом используется памяти только под один товар
$prev_product_id = null;
while($p = $simpla->db->result())
{
$variant_url = '';
if ($prev_product_id === $p->product_id)
	$variant_url = '?variant='.$p->variant_id;
$prev_product_id = $p->product_id;

$price = round($simpla->money->convert($p->price, $main_currency->id, false),2);
print "<url>
<loc>".$simpla->config->root_url.'/products/'.$p->url.$variant_url."</loc>";
if($p->image)
print "
<image:image>
<image:loc>".$simpla->design->resize_modifier($p->image, 200, 200)."</image:loc>";
print "</image:image>
";
print "</url>";
}

print "</urlset>";

 

Почему то вытягивает всего одну ссылку из базы!!! Хотя должен очень много)) Цикл не срабатывает где-то!!

Ссылка на сообщение
Поделиться на другие сайты
while($p = $simpla->db->result())
{

 

я думал вот начало цикла - типо пока есть записи в базе данных - выводим ссылки

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

корс,  а почему цикл не срабатывает-то?? по идее условие while - "до тех пор пока есть записи в таблице"...

в цикл заходит, но извлекает только самую первую запись. Ощущение что лимит где-то стоит - в запросе вроде лимита нету

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

kors, вместа ехидства лучше бы помог человеку)) я не программист и мне тяжело что-то там ковыряться смотреть, потому и прошу помощи на форуме))

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

Напишите

LEFT JOIN __images i ON p.id = i.product_id AND i.position=0

 
и не мучайтесь
 
UPD Походу не так понял
Возможно Вы имели ввиду, что надо все картинки товара экспортировать
Тада так

$simpla->get_images(array('product_id' => $p->product_id));
foreach ($images as $i) {
  print "<image:image>
<image:loc>".$simpla->design->resize_modifier($i->filename, 200, 200)."</image:loc>
</image:image>
";
}

А ошибка вылетает потому что у ифа надо скобки ставить когда несколько команд - вот так

if($p->image) {
print "
<image:image>
<image:loc>".$simpla->design->resize_modifier($p->image, 200, 200)."</image:loc>";
print "</image:image>
";
}
Ссылка на сообщение
Поделиться на другие сайты

 

Напишите

LEFT JOIN __images i ON p.id = i.product_id AND i.position=0

 

и не мучайтесь

 

UPD Походу не так понял

Возможно Вы имели ввиду, что надо все картинки товара экспортировать

Тада так

$simpla->get_images(array('product_id' => $p->product_id));
foreach ($images as $i) {
  print "<image:image>
<image:loc>".$simpla->design->resize_modifier($i->filename, 200, 200)."</image:loc>
</image:image>
";
}

 

надо не картинки экспортировать и ресайзить, а просто сгенерить карту сайта для картинок.

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

надо не картинки экспортировать и ресайзить, а просто сгенерить карту сайта для картинок.

карта сайта - есть формат экспорта.

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

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...
require_once('api/Simpla.php');
$simpla = new Simpla();
header("Content-type: text/xml; charset=UTF-8");
// Заголовок
print
'<?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">';
// Товары
$simpla->db->query("SELECT v.price, v.id AS variant_id, p.name AS product_name, v.name AS variant_name, v.position AS variant_position, p.id AS product_id, p.url, p.annotation, pc.category_id, i.filename AS image
FROM s_variants v
LEFT JOIN s_products p ON v.product_id = p.id
LEFT JOIN s_products_categories pc ON p.id = pc.product_id
AND pc.position = ( 
SELECT MIN( position ) 
FROM s_products_categories
WHERE product_id = p.id
LIMIT 1 ) 
LEFT JOIN s_images i ON p.id = i.product_id
AND i.position = ( 
SELECT MIN( position ) 
FROM s_images
WHERE product_id = p.id
LIMIT 1 ) 
WHERE p.visible
GROUP BY v.id
ORDER BY p.id, v.position");
// В цикле мы используем не results(), a result(), то есть выбираем из базы товары по одному,
while($p = $simpla->db->result())
{
print "<url>
<loc>".$simpla->config->root_url.'/products/'.$p->url."</loc>";
if($p->image)
{
print "
<image:image>
<image:loc>".$simpla->design->resize_modifier($p->image, 200, 200)."</image:loc>";
print "</image:image>";
}
print "</url>";
}
print "</urlset>";

Кароче заходит в цикл while и обрабатывает запросом только самую первую запись. Дальше стопорится. В чем трабла?? Почему циклом не обрабатываются последующие записи??

 

 

Результат работы скрипта здесь

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

while($p = $simpla->db->result())

 

пробовал на results заменить - не помогает  :ph34r:

 

Стоило закомментировать if - цикл заработал. Но без if нету смысла генерить такую карту с урлами одними.

 

/*if($p->image)
{
print "<image:image><image:loc>".$simpla->design->resize_modifier($p->image, 200, 200)."</image:loc>";
print "<image:title>".$p->product_name."</image:title>";
print "</image:image>";
}*/

 

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

Найдена ошибка:

 

print "<image:loc>".$simpla->design->resize_modifier($p->image, 200, 200)."</image:loc>";
 

 

 

очевидно что из-за этой строки ругается цикл. Заходит в while, попадает в if. А здесь прерывается!!!

 

Отбой, помогли решить)

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

Найдена ошибка:

 

print "<image:loc>".$simpla->design->resize_modifier($p->image, 200, 200)."</image:loc>";
 

 

 

очевидно что из-за этой строки ругается цикл. Заходит в while, попадает в if. А здесь прерывается!!!

 

Отбой, помогли решить)

 

Да уж, вы бы тогда выложили решение! Дело скорее всего в $simpla->design->resize_modifier.

 

Напишите как решили!

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

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

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

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

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

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

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

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

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

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