Перейти к содержанию

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

OCshop 1.5.5.1 генерирует урлы с названия и модели, мне нужно оставить только название. Не могу понять где искать, кто может подсказать

в /admin/view/template/common/header.tpl подключаются такие скрипты

 

<script type="text/javascript" src="view/javascript/jquery/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="view/javascript/jquery/ui/jquery-ui-1.8.16.custom.min.js"></script>
<link rel="stylesheet" type="text/css" href="view/javascript/jquery/ui/themes/ui-lightness/jquery-ui-1.8.16.custom.css" />
<script type="text/javascript" src="view/javascript/jquery/tabs.js"></script>
<script type="text/javascript" src="view/javascript/jquery/superfish/js/superfish.js"></script>

по идеи здесь должен быть translit.js ,  но его нету и эти файлы насколько я понимаю так же не отвечают за урлы, подскажите куда двигаться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, btrotsky сказал:

урлы с названия и модели,

фото в студию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
53 минуты назад, d0tb0t сказал:

фото в студию

Ссылка https://hospodarka.com.ua/godinnik-nastinnij-na-polotni-3-sekcijnij-francuzkij-sharm-06-317-ut000007628

 

https://gyazo.com/90d67f63b7c72ddb260cb391ec288638

 

ошибся, не модель, а sku

Изменено пользователем btrotsky

Поделиться сообщением


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

@btrotsky

Из текста непонятно что и где не так и что хотите на выходе.

После ссылок на ваш ресурс понятней не стало.

Можно на картинке красным обвести как есть и что хочу?

Поделиться сообщением


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

@btrotsky

Годинник настінний на полотні 3-секційний Французький шарм 06-317

Это название товара, оно скорей всего так и написано с артикулом.

В зависимости от версии (opencart или ocestore) это либо название товара либо специальное поле h1.

Это же поле подставляется в текст ссылки в хлебных крошках при сборке странице. За это отвечает контролер. JS тут не причём.

Что в названии (и заголовке если есть) у этого товара , в админке?

Изменено пользователем d0tb0t

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, d0tb0t сказал:

@btrotsky

Из текста непонятно что и где не так и что хотите на выходе.

После ссылок на ваш ресурс понятней не стало.

Можно на картинке красным обвести как есть и что хочу?

 

хочу убрать SKU с урла, то есть чтобы генерировалось только с названия

ec307b75fcc6bb8aebf8222579bf6886.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 минут назад, btrotsky сказал:

хочу убрать SKU с урла, то есть чтобы генерировалось только с названия

Штатно опенкар не генерирует URL, Там специальное поле.

URL либо руками прописали в админке, либо при наполнении каталога, либо специальной автоматически поменяли SEO утилитой которая из набора данных в товаре переписывает URL. Что написано в поле URL у этого товара?

Если магазин живой url существующих товаров лучше не менять.

 

Изменено пользователем d0tb0t

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, d0tb0t сказал:

Штатно опенкар не генерирует URL

URL либо руками прописали в админке, либо при наполнении каталога, либо специальной автоматически поменяли SEO утилитой которая из набора данных в товаре переписывает URL. Что написано в поле URL у этого товара?

Если магазин живой url существующих товаров лучше не менять.

 

это ocshop, они делали автогенерацию, ничего не прописывают, все товары выгружаются с 1с (и в 1с его тоже не прописывают) он уже на сайте появляется, и мне не нужно менять существущие, а чтобы при следующей выгрузке новые товары формировались у урлом без SKU

 

посторонних модулей я не нашел в дополнениях

Поделиться сообщением


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

посмотрите в папке vqmod/xml

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, thentru сказал:

посмотрите в папке vqmod/xml

там тоже нету

 

пока объяснял искал строчку в файле выгрузки, нашел вот


'sku' => $product['id'],
'keyword' => $translit->toTranslit( $product['name']['uk'] . '-' . $product['id'] ),

если я уберу $product['id'] у меня должно получится как я хочу?

Изменено пользователем btrotsky
  • +1 1

Поделиться сообщением


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

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

  • +1 1

Поделиться сообщением


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

..

Изменено пользователем d0tb0t

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, btrotsky сказал:

пока объяснял искал строчку в файле выгрузки, нашел вот

 

1 минуту назад, d0tb0t сказал:

Новый товар выгруженный из 1c не имеет SKU в url а потом приписка как-то появляется?

полностью файл выгрузки покажите

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, thentru сказал:

 

полностью файл выгрузки покажите

<?php

// Skip time limit for big updates
set_time_limit(0);

// Startup
require_once('./startup.php');

// Init response array
$response = array();

// Get global settings
$configdb = (array)$settings->getSetting('config');

// Actions
if ( !empty( $_POST ) )
{
	if ( $_POST['action'] === 'update' ) { //UPDATE PRODUCTS
		// Get import settings
		$xml = simplexml_load_string( file_get_contents('./settings.xml'), 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS );
		if ( !$xml ) {
			$response = array(
				'status' => 0,
				'detail' => 'НЕ УДАЛОСЬ ПОЛУЧИТЬ ФАЙЛ НАСТРОЕК'
			);
		} else {
			$settings = json_decode( json_encode( $xml ), true );
			array_walk( $settings, 'trim' );
			
			$data = @json_decode( $_POST['data'], true );

			// init groups sync
			if ( !empty( $data ) ) {
				foreach ( $data as $product ) {
					//trim data
					$product['id'] = trim( $product['id'] );
					$product['name'] = array_map('trim', $product['name'] );
					$product['code'] = trim( $product['code'] );

					// step 0 - check consistent upload
					if ( empty( $product['id'] ) || empty( $product['name'] ) ) {
						continue;
					}

					//step 1 — check existing sync code
					$existing_id = $productex->getSyncedProduct( $product['id'] );
					
					//check parent
					$categories = array();
					$categories[] = $categoryex->getSyncedCategory( $product['category'] );
					/*if ( !empty( $product['category'] ) ) {
						foreach ( $product['category'] as $category_id ) {
						}
					}*/
					
					//compose data array
					$data = array (
						'sync_id' => $product['id'],
						'product_description' => array (
							8 => array (
								'name' => $product['name']['ru'],
								'seo_h1' => '',
								'seo_title' => '',
								'meta_keyword' => '',
								'meta_description' => '',
								'description' => $product['description']['ru'],
								'tag' => '',
							),
							9 => array (
								'name' => $product['name']['uk'],
								'seo_h1' => '',
								'seo_title' => '',
								'meta_keyword' => '',
								'meta_description' => '',
								'description' => $product['description']['uk'],
								'tag' => '',
							),
						),
						'model' => !empty($product['code']) ? $product['code'] : $product['id'],
						'sku' => $product['id'],
						'upc' => '',
						'ean' => '',
						'jan' => '',
						'isbn' => '',
						'mpn' => '',
						'location' => '',
						//'price' => $product['price'],
						//'quantity' => $product['stock'],
						'tax_class_id' => '0',
						'minimum' => '1',
						'subtract' => '1',
						'stock_status_id' => isset($configdb['config_stock_status_id']) ? $configdb['config_stock_status_id'] : '5',
						'shipping' => '1',
						'keyword' => $translit->toTranslit( $product['name']['uk'] . '-' . $product['id'] ),
						//'image' => 'no_image.jpg',
						'date_available' => date('Y-m-d'),
						'length' => '',
						'width' => '',
						'height' => '',
						'length_class_id' => '1',
						'weight' => isset($product['weight']) ? $product['weight'] : 0,
						'weight_class_id' => '1',
						// 'status' => ($product['stock'] > 0) ? 1 : 0,
						'sort_order' => '1',
						'manufacturer_id' => '0',
						'filter' => '',
						'product_store' => array (
							0 => '0',
						),
						'download' => '',
						'related' => '',
						'option' => '',
						'points' => '',
						'product_reward' => array (
							1 => array (
								'points' => '',
							),
						),
						'product_layout' => array (
							0 => array (
								'layout_id' => '',
							),
						),
					);
					
					if ( !empty( $categories ) ) {
						$data['product_category'] = $categories;
					} else {
						$data['product_category'] = array();
					}

					if ( !empty( $product['manufacturer'] ) ) {
						$manufacturer_id = $manufacturerex->getSyncedManufacturer( trim( $product['manufacturer'] ) );
						
						if ( $manufacturer_id )
							$data['manufacturer_id'] = $manufacturer_id;
					}
					
					if ( $existing_id ) {
						$productex->editProduct( $existing_id, $data );
					} else {
						$data['image'] = 'no_image.jpg';
						$productex->addProduct( $data );
					}
					
					// check alias
					if ( !empty( $product['alias'] ) ) {
						foreach ( $product['alias'] as $alias => $show ) {
							$productex->saveAlias( $product['id'], $alias, $show );
						}
					}
				}

				$response = array(
					'status' => 1,
					'detail' => 'ОБНОВЛЕНИЕ ТОВАРА ЗАВЕРШЕНО'
				);

			} else {
				$response = array(
					'status' => 0,
					'detail' => 'СПИСОК ТОВАРОВ ПУСТ'
				);
			}
		}
	} else if ( $_POST['action'] === 'price' ) { //UPDATE PRICE
		$data = @json_decode( $_POST['data'], true );
		
		// init groups sync
		if ( !empty( $data ) ) {
			$skipped = 0;
			
			foreach ( $data as $product ) {
				$product['id'] = trim( $product['id'] );
				
				// step 0 - check consistent upload
				if ( empty( $product['id'] ) ) {
					$skipped++; continue;
				}
				
				//step 1 — check existing sync code
				$existing_id = $productex->getSyncedProduct( $product['id'] );
				
				if ( $existing_id ) {
					$productex->clearProductPriceSpecial( $existing_id );

					if (isset($product['special']) && $product['special'] == true) {
						if (isset($product['roz'])) {
							$p = $productex->getProduct($existing_id);
							if (empty($p['price'])) {
								$price = $product['roz'] * 1.1;
								$productex->editProductPrice( $existing_id, $price );
							}

							$productex->editProductPriceSpecial( $existing_id, 1, $product['roz'] );
						}

						if (isset($product['opt']))
							$productex->editProductPriceSpecial( $existing_id, 2, $product['opt'] );

					} else {
						$productex->editProductPrice( $existing_id, $product['roz'] );
						$productex->editProductPriceDiscount( $existing_id, 2, $product['opt'] );
					}
				} else {
					$skipped++;
				}
			}

			$response = array(
				'status' => 1,
				'detail' => 'ЦЕНЫ ТОВАРОВ ОБНОВЛЕНЫ (ПРОПУЩЕНО ТОВАРОВ: ' . $skipped . ')'
			);

		} else {
			$response = array(
				'status' => 0,
				'detail' => 'СПИСОК ТОВАРОВ ПУСТ'
			);
		}
	} else if ( $_POST['action'] === 'stock' ) { //UPDATE STOCK
		$data = @json_decode( $_POST['data'], true );
		
		// init groups sync
		if ( !empty( $data ) ) {
			$skipped = 0;
			
			foreach ( $data as $product ) {
				$product['id'] = trim( $product['id'] );
				
				// step 0 - check consistent upload
				if ( empty( $product['id'] ) || $product['qty'] <= 0) {
					$skipped++; continue;
				}
				
				//step 1 — check existing sync code
				$existing_id = $productex->getSyncedProduct( $product['id'] );
				
				if ( $existing_id ) {
					$productex->editProductQty( $existing_id, $product['qty'] );
				} else {
					$skipped++;
				}
			}

			$response = array(
				'status' => 1,
				'detail' => 'ОСТАТКИ ТОВАРОВ ОБНОВЛЕНЫ (ПРОПУЩЕНО ТОВАРОВ: ' . $skipped . ')'
			);

		} else {
			$response = array(
				'status' => 0,
				'detail' => 'СПИСОК ТОВАРОВ ПУСТ'
			);
		}
	} else if ( $_POST['action'] === 'synonym' ) { //UPDATE SYNONYMS
		$data = @json_decode( $_POST['data'], true );
		
		// init groups sync
		if ( !empty( $data ) ) {
			$productex->clearSynonyms();
			
			foreach ( $data as $item ) {
				$original = key( $item );
				$synonym = current( $item );
				
				$productex->saveSynonym( $original, $synonym );
			}

			$response = array(
				'status' => 1,
				'detail' => 'СИНОНИМЫ ОБНОВЛЕНЫ'
			);

		} else {
			$response = array(
				'status' => 0,
				'detail' => 'СПИСОК СИНОНИМОВ ПУСТ'
			);
		}
	} else if ( $_POST['action'] === 'details' ) { //UPDATE DETAILS

		// Get import settings
		$xml = simplexml_load_string( file_get_contents('./settings.xml'), 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS );
		if ( !$xml ) {
			$response = array(
				'status' => 0,
				'detail' => 'НЕ УДАЛОСЬ ПОЛУЧИТЬ ФАЙЛ НАСТРОЕК'
			);
		} else {
			$settings = json_decode( json_encode( $xml ), true );
			array_walk( $settings, 'trim' );
	
			$data = @json_decode( $_POST['data'], true );
			
			// init groups sync
			if ( !empty( $data ) ) {
				if ( !empty( $data['description'] ) ) {
					foreach ( $data['description'] as $sync_id => $description ) {
						$sync_id = trim( $sync_id );
						
						$existing_id = $productex->getSyncedProduct( $sync_id );
						
						if ( !empty( $existing_id ) ) {
							$productex->editProductDescription( $existing_id, trim( $description ) );
						}
					}
				}

				if ( !empty( $data['meta_keywords'] ) ) {
					foreach ( $data['meta_keywords'] as $sync_id => $meta_keywords ) {
						$existing_id = $productex->getSyncedProduct( $sync_id );
						
						if ( !empty( $existing_id ) ) {
							$productex->editProductMetaKeywords( $existing_id, trim( $meta_keywords ) );
						}
					}
				}
				
				$response = array(
					'status' => 1,
					'detail' => 'ДЕТАЛИ ТОВАРА ОБНОВЛЕНЫ'
				);
			} else {
				$response = array(
					'status' => 0,
					'detail' => 'СПИСОК ДЕТАЛЕЙ ТОВАРА ПУСТ'
				);
			}
		}
	} else if ( $_POST['action'] === 'clear' ) { //DISABLE PRODUCTS
		$productex->disableProducts();
		$productex->clearAliases();

		$response = array(
			'status' => 1,
			'detail' => 'ВСЕ ТОВАРЫ ОТКЛЮЧЕНЫ'
		);

	} else if ( $_POST['action'] === 'clean' ) { //CLEAN MODEL
		$r = mysql_connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD);
		mysql_select_db( DB_DATABASE, $r );
		$result = mysql_query( 'SELECT product_id, model FROM oc_product WHERE `sku` = "" ORDER BY product_id LIMIT 10000', $r );
		while ( $row = mysql_fetch_assoc($result) ) {
			mysql_query('UPDATE oc_product SET `sku` = "' .  $productex->cleanModel( $row['model'] ) . '" WHERE product_id = "' . $row['product_id'] . '"');
		}
		
		die('finish');
	
	} else {
		$response = array(
			'status' => 0,
			'detail' => 'НЕВЕРНЫЙ ПАРАМЕТР ACTION'
		);
	}
} else {
	$response = array(
		'status' => 0,
		'detail' => 'НЕВЕРНЫЙ ЗАПРОС'
	);
}

sendResponse( $response );

мне кстати сюда еще допилить выгрузку атрибутов нужно, не могу разобраться

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
19 часов назад, thentru сказал:

 

полностью файл выгрузки покажите

вы б могли помочь с допилением атрибутов в файл выгрузки?

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.