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

Транслитерация изображений simpla


Перейти к решению Решено ahmed,

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

Добрый день, спрашивал на днях про транслитерацию изображений, и что то даже никто не ответил. И так что я сделал. 

 

Создал файлик img_rename.php c таким содержанием

 

 

 

<?php

function correct_filename($filename){
	$ru = explode('-', "А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я"); 
	$en = explode('-', "A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch---Y-y---E-e-YU-yu-YA-ya");

	$res = str_replace($ru, $en, $filename);
	$res = preg_replace("/[\s]+/ui", '-', $res);
	$res = preg_replace("/[^a-zA-Z0-9\.\-\_]+/ui", '', $res);
	$res = strtolower($res);
	return $res;  
}

require_once('api/Simpla.php');

$simpla = new Simpla();

$query = $simpla->db->query('SELECT * FROM __images');
$images = $simpla->db->results($query);

$DIR = dirname(__FILE__).'/files/originals';


$done = 0;
foreach($images as $img){
	$new_name = correct_filename($img->filename);
	
	if($new_name !== $img->filename){
		if(file_exists($DIR.'/'.$img->filename)){
		
			if(rename($DIR.'/'.$img->filename, $DIR.'/'.$new_name)){
				$simpla->db->query('UPDATE __images SET filename=? WHERE id=?', $new_name, $img->id);
				
				$done++;
			}
			
		
		}else{
			echo 'Not find (prid:'.$img->product_id.'): /files/originals/'.$img->filename."\n";
		
		}
	
	
	}

}

echo "DONE: {$done}\n";
echo "ALL: ".count($images)."\n";


//Чистим кеш
$rem = glob(dirname(__FILE__).'/files/products/*.jpg');
foreach($rem as $d){
	unlink($d);
}
echo "END";

 

Но почему то не работает. 

Подскажите куда копать? Я с симплой, пока немного знаком.

 

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

:)  Есть кто живой на палубе?

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

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

 

:) Вижу вы специалист по симпле, подскажите что не так?

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

:) Вижу вы специалист по симпле, подскажите что не так?

Для начала посмотрите как вы переименовываете файл, вы забыли о разрешении файла в коде это почему-то не учтено.
Ссылка на сообщение
Поделиться на другие сайты

Для начала посмотрите как вы переименовываете файл, вы забыли о разрешении файла в коде это почему-то не учтено.

Но переименовывать то он должен, из 300 файлов, ни одного не изменено. Сам механизм подключения к симпле верен?

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

Но переименовывать то он должен, из 300 файлов, ни одного не изменено. Сам механизм подключения к симпле верен?

Тебе что в лоб что по лбу, ты вообще внимательно читаешь что я тебе пишу?

Перечитай пост несколько раз.

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

Тебе что в лоб что по лбу, ты вообще внимательно читаешь что я тебе пишу?

Перечитай пост несколько раз.

 

Вы не адекватны. Не пишите больше в тему. Спасибо. 

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

Начать с того, что это полностью не работает из-за

$images = $simpla->db->results($query);

Надо

$images = $simpla->db->results();

 

И возможны другие ошибки, уже в логике Вашего скрипта...

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

Начать с того, что это полностью не работает из-за

$images = $simpla->db->results($query);

Надо

$images = $simpla->db->results();

 

И возможны другие ошибки, уже в логике Вашего скрипта...

 

Спасибо! Все заработало! 

 

:) Админы перенесите в готовые решения. Вдруг кому пригодится.

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

Интересно...

где вы его взяли? 

 

Я этот скрипт делал еще в 2014 году. Когда только первый раз установил симплу...

 

и в паблик я его не выкидывал... Даже вроде не давал никому...

 

 

PS: раз уже просочилось откуда то. То выложу исправленную версию

image_rename.php

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Если уж выкладываете "исправленную версию", то надо бы в ней устранить хоть явные ошибки.

 

В частности, в строке

$rem = glob($simpla->config->root_dir . $simpla->config->resized_images_dir . '*.jpg');

с ходу можно обнаружить целых 3 (!) ошибки.

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

Kors - знаешь куда тебе идти нужно?

Как ты в жизни своей еще "явных ошибок" не нашел? 

 

.............................

 

 

steam - покажете где вы этот код взяли? 

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Эта функция у меня в чистой симпле есть (2.3.8) в Image.php

 

private function correct_filename($filename)
	{
		$ru = explode('-', "А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я"); 
		$en = explode('-', "A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch---Y-y---E-e-YU-yu-YA-ya");

	 	$res = str_replace($ru, $en, $filename);
		$res = preg_replace("/[\s]+/ui", '-', $res);
		$res = preg_replace("/[^a-zA-Z0-9\.\-\_]+/ui", '', $res);
	 	$res = strtolower($res);
	    return $res;  
	}

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


 

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

ну не придумывайте это для версий примерно < 2.3

 

где этой функции нет...

 

В версии Simpla 2.2.4 от 12.07.2013 в import.php есть функция

private function translit($text)

которая, кроме названия функции и имени передаваемой переменной, отличается от приведенной

function correct_filename($filename)

самую малость в одной строке.

 

Эта функция есть (опять же с малюсеньким отличием) в версии 2.1.5 от 2012 года. А может, и в более ранних...

 

Вопрос о том, есть ли где в классах Симплы готовая функция для транслитерации, обсуждался на форуме еще в 2013 году:

http://forum.simplacms.ru/topic/5830-%D0%B5%D1%81%D1%82%D1%8C-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F-%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8/

 

Вряд ли есть смысл отстаивать авторские права по такому пустяковому поводу...

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

Интересно...

где вы его взяли? 

 

Я этот скрипт делал еще в 2014 году. Когда только первый раз установил симплу...

 

и в паблик я его не выкидывал... Даже вроде не давал никому...

 

 

PS: раз уже просочилось откуда то. То выложу исправленную версию

 

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

Vqmod очень удобная штука. Спасибо за нее.

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

В версии Simpla 2.2.4 от 12.07.2013 в import.php есть функция

private function translit($text)

которая, кроме названия функции и имени передаваемой переменной, отличается от приведенной

function correct_filename($filename)

самую малость в одной строке.

 

Эта функция есть (опять же с малюсеньким отличием) в версии 2.1.5 от 2012 года. А может, и в более ранних...

 

Вопрос о том, есть ли где в классах Симплы готовая функция для транслитерации, обсуждался на форуме еще в 2013 году:

http://forum.simplacms.ru/topic/5830-%D0%B5%D1%81%D1%82%D1%8C-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F-%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8/

 

Вряд ли есть смысл отстаивать авторские права по такому пустяковому поводу...

 

Ты что бредишь? А ничего что она private что там что там. Как ее вызывать в скрипте без правок? 

 

а по поводу авторства - я что отстаиваю что то? Я лишь пытаюсь найти утечку кода...

 

по универсальному транслиту: уже давно предлагал https://github.com/yr4ik/Simpla-vqmod/tree/master/_examples/translit

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Ты что бредишь? А ничего что она private что там что там. Как ее вызывать в скрипте без правок?

 

Вы совершенно правы, без правок никак.

Правки довольно значительны - сначала скопировать, потом вставить, и еще надо удалить слово 'private'. А может, и еще что удалить, или заменить...

Автором  Simpla так сделано еще в версии 2.1.5 в 2012 году, Вы можете это можете легко увидеть в файле 1c_exchange.php.

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

Интересно...

где вы его взяли? 

 

Я этот скрипт делал еще в 2014 году. Когда только первый раз установил симплу...

 

и в паблик я его не выкидывал... Даже вроде не давал никому...

 

 

PS: раз уже просочилось откуда то. То выложу исправленную версию

А куда этот скрипт помещать? Подскажите, пожалуйста, и нужны ли дополнительные действия?

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

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

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

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

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

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

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

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

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

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