iMessi89 Опубликовано 23 апреля, 2013 Жалоба Поделиться Опубликовано 23 апреля, 2013 Стандарт гугловский для 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 Кароче как сгенерить знаю, не знаю как путь до картинки получить!!! Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 23 апреля, 2013 Автор Жалоба Поделиться Опубликовано 23 апреля, 2013 http://clip2net.com/s/4XO0zR - попробовал вот так получить картинку - не получается нифига((( Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 20 мая, 2013 Автор Жалоба Поделиться Опубликовано 20 мая, 2013 <?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>"; Почему то вытягивает всего одну ссылку из базы!!! Хотя должен очень много)) Цикл не срабатывает где-то!! Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 21 мая, 2013 Автор Жалоба Поделиться Опубликовано 21 мая, 2013 while($p = $simpla->db->result()) { я думал вот начало цикла - типо пока есть записи в базе данных - выводим ссылки Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 21 мая, 2013 Автор Жалоба Поделиться Опубликовано 21 мая, 2013 корс, а почему цикл не срабатывает-то?? по идее условие while - "до тех пор пока есть записи в таблице"...в цикл заходит, но извлекает только самую первую запись. Ощущение что лимит где-то стоит - в запросе вроде лимита нету Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 21 мая, 2013 Жалоба Поделиться Опубликовано 21 мая, 2013 $simpla->db->result() - одна строка$simpla->db->results() - много строчек Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 21 мая, 2013 Автор Жалоба Поделиться Опубликовано 21 мая, 2013 $simpla->db->result() - одна строка$simpla->db->results() - много строчек Ошибку выдает Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 21 мая, 2013 Автор Жалоба Поделиться Опубликовано 21 мая, 2013 kors, вместа ехидства лучше бы помог человеку)) я не программист и мне тяжело что-то там ковыряться смотреть, потому и прошу помощи на форуме)) Цитата Ссылка на сообщение Поделиться на другие сайты
disfated Опубликовано 21 мая, 2013 Жалоба Поделиться Опубликовано 21 мая, 2013 Напишите 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> "; } Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 21 мая, 2013 Автор Жалоба Поделиться Опубликовано 21 мая, 2013 Напишите 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> "; } надо не картинки экспортировать и ресайзить, а просто сгенерить карту сайта для картинок. Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 21 мая, 2013 Автор Жалоба Поделиться Опубликовано 21 мая, 2013 kors денег хочет Цитата Ссылка на сообщение Поделиться на другие сайты
disfated Опубликовано 21 мая, 2013 Жалоба Поделиться Опубликовано 21 мая, 2013 надо не картинки экспортировать и ресайзить, а просто сгенерить карту сайта для картинок.карта сайта - есть формат экспорта.Вы хоть тогда задачу поставьте нормально - из темы ни капли не ясно что именно требуется... Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 10 июня, 2013 Автор Жалоба Поделиться Опубликовано 10 июня, 2013 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 и обрабатывает запросом только самую первую запись. Дальше стопорится. В чем трабла?? Почему циклом не обрабатываются последующие записи?? Результат работы скрипта здесь Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 10 июня, 2013 Автор Жалоба Поделиться Опубликовано 10 июня, 2013 while($p = $simpla->db->result()) пробовал на results заменить - не помогает Стоило закомментировать 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>";}*/ Цитата Ссылка на сообщение Поделиться на другие сайты
iMessi89 Опубликовано 10 июня, 2013 Автор Жалоба Поделиться Опубликовано 10 июня, 2013 Найдена ошибка: print "<image:loc>".$simpla->design->resize_modifier($p->image, 200, 200)."</image:loc>"; очевидно что из-за этой строки ругается цикл. Заходит в while, попадает в if. А здесь прерывается!!! Отбой, помогли решить) Цитата Ссылка на сообщение Поделиться на другие сайты
mandrake555 Опубликовано 20 октября, 2014 Жалоба Поделиться Опубликовано 20 октября, 2014 Можете выложить уже сделанное решение? Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 19 октября, 2016 Жалоба Поделиться Опубликовано 19 октября, 2016 Найдена ошибка: print "<image:loc>".$simpla->design->resize_modifier($p->image, 200, 200)."</image:loc>"; очевидно что из-за этой строки ругается цикл. Заходит в while, попадает в if. А здесь прерывается!!! Отбой, помогли решить) Да уж, вы бы тогда выложили решение! Дело скорее всего в $simpla->design->resize_modifier. Напишите как решили! Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.