• 2876
  • 13
  • 0
Нравится блог?
Подписывайтесь!

Ссылки в имени файла

код

У нас на goldenrealty.kz есть слайд-шоу вверху страницы. Картинки для него лежат в папке, а php-скрипт берёт их оттуда и отдаёт флешке в xml.

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

Первой мыслью было загнать картинки в базу и к нужным из них добавить поля с ссылками, затем подправить скрипт на работу с базой. Второй — вручную составить xml и заранее вбить туда адреса картинок ссылки на них. В первом случае появлялись лишние обращения к базе причем с каждой перезагрузкой страницы. Во втором — лишняя работа для нашей поддержки. После непродолжительных поисков было найдено нетривиальное решение: хранить ссылки на изображения в названиях самих изображений.

В названии изображения мы ставим метку, например "link", по которой мы будем определять, что изображение вообще содержит ссылку. После метки мы ставим только ту часть адреса, которая нам необходима. Если картинка ведёт на http://goldenrealty.kz/node/425 , то нам, соответственно, нужна только уникальна часть адреса, то есть "425". Остальная часть "http://goldenrealty.kz/node/" одинакова для всех картинок: её можно держать сразу во флешке. Таким образом название файла должно быть следующим: some_file_name_link425.jpg

Ну а дальше всё просто, смотрите на код флешки с комментами:

var newpic_arrvalue=data_arr[id]; //вытаскиваем текущую кар тику из массива картинок для частого обращения
if(newpic_arr_value.indexOf("link")!=-1){ //проверяем содержит ли название файла нашу метку "link"
newpic.lnk = newpic_arr_value.substring(newpic_arr_value.indexOf("link")+4,newpic_arr_value.indexOf(".")); // вытаскиваем уникальную часть адреса ,которая находится между меткой "link" и символом "."
newpic.onRelease=function(){ //ну тут понятно: переходим по адресу если есть нажатие. Смысла писать название домена нет ,так как флешка на нём находится, поэтому адрес от корня
getURL("/node/"+this.lnk,"_blank");
}
}

В таком подходе (использовании только уникальной части адреса) есть своё лукавство. Дело в том, что в названии файла недопустимы символы необходимые для написания полного адреса: \/:*?"<>| Это можно легко увидеть если попытаться переименовать любой файл на компьютере с использованием этих символов.

Если же вам всё таки необходимо использовать полный адрес в названии, то его можно зашифровать и преобразовать в "нормальный" уже в самой флешке. Например, y нас есть такой адрес:

http://www.somesite.kz/search?um=1&q=some+words&gs_upl=5l134435l0

закодируем запрещённые символы какими-нибудь другими:

: -> ;;

? -> )(

/ -> ][

| -> )[

И получим такую странную строку:

http;;][][www.somesite.kz][search)(um=1&q=some+words&gs_upl=5)[134435)[0

Ну а далее, не сложный код во флеше:

var str:String="http;;][][www.somesite.kz][search)(um=1&q=some+words&gs_upl=5)[134435)[0"; //наша строка
var replace_arr=[[";;",":"],["][","/"],[")(","?"],[")[","|"]]; // массив с символами и их реальными аналогами
function stringReplace(query:String):String{
for(var i=0;i<replace_arr.length;i++){
query=query.split(replace_arr[i][0]).join(replace_arr[i][1]); //перебираем и заменяем
}
return query;
}
trace(stringReplace(str)); //http://www.somesite.kz/search?um=1&q=some+words&gs_upl=5|134435|0

Остался один ньюанс. В предыдущем примере окончание ссылки мы искали по символу "." В данном случае это не подойдёт потому что поиск закончится на данном отрезке: ".kz" Чтобы этого не произошло в конце названия файла нам понадобится ещё одна метка, например "endlink". В результате имеем название файла "some_file_name_linkhttp;;][][www.somesite.kz][search)(um=1&q=some+words&gs_upl=5)[134435)[0endlink.jpg"

И небольшой код для извлечения адреса перед его обработкой функцией stringReplace:

var file_name:String="some_file_name_linkhttp;;][][www.somesite.kz][search)(um=1&q=some+words&gs_upl=5)[134435)[0endlink.jpg";
var str:String = file_name.substring(file_name.indexOf("link")+4,file_name.indexOf("endlink"));
trace(str) //http;;][][www.somesite.kz][search)(um=1&q=some+words&gs_upl=5)[134435)[

И всё, можно пользоваться.

AstanaWebConsult
28 июня 2011, 12:53
336

Загрузка...
Loading...

Комментарии

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

СМИ – ассистент провокаторов? Как гости из соседних стран сеют раздор в Казахстане

СМИ – ассистент провокаторов? Как гости из соседних стран сеют раздор в Казахстане

Инцидент с пьяным киргизским гостем на борту Air Astana, наверное, остался бы только во внутренних сводках авиакомпании, если бы г-н Доган, не поднял громкий крик о государственном языке.
openqazaqstan
17 авг. 2017 / 14:43
  • 12268
  • 178
Дайте Байбеку сломать и переделать город. Он хочет шагнуть вверх, а не бабло украсть

Дайте Байбеку сломать и переделать город. Он хочет шагнуть вверх, а не бабло украсть

Я в тогдашней Алма-Ате родился, вырос. В школу начал ходить пешком. Весь центр опползал. Все эти знаковые места помню как ещё не знаковые места. Никаких этих ностальгических страданий у меня нет.
Aidan_Karibzhanov
21 авг. 2017 / 16:25
  • 7496
  • 34
Подземная Акмечеть Бекет-Ата в Атырауской области – одно из самых сакральных мест

Подземная Акмечеть Бекет-Ата в Атырауской области – одно из самых сакральных мест

Его отцом был Мырзагул, матерью Жания, оба глубоко верующие. По рассказам, Бекет-Ата обладал богатырской силой, что в том числе помогало выбивать мечети в крепких скалах.
theYakov
21 авг. 2017 / 17:21
  • 3441
  • 3
Имеющий уши да услышит. Латиница касается только казахского языка

Имеющий уши да услышит. Латиница касается только казахского языка

Президент Назарбаев наконец-то разъяснил для всех, кто ещё не понял, очевидный вопрос, который всем в Казахстане очевиден. Елбасы повторил: на латиницу мы переводим казахский язык, и это не означает отказ от русского языка.
openqazaqstan
18 авг. 2017 / 16:23
  • 3576
  • 52
Байбек замахнулся на то, о чём давным-давно писали и говорили – «город для людей»

Байбек замахнулся на то, о чём давным-давно писали и говорили – «город для людей»

Какой «золотой квадрат»? Вам действительно это место кажется лучшим?! Вот когда Байбеку удастся воплотить в реальность скверы и парки, тогда я буду согласен называть старый центр золотым квадратом.
openqazaqstan
вчера / 16:53
  • 3183
  • 20
«Нас и здесь неплохо кормят», или почему я не собираюсь уезжать из Казахстана

«Нас и здесь неплохо кормят», или почему я не собираюсь уезжать из Казахстана

Я всегда теряюсь, когда слышу этот вопрос, потому что я так и не сумел выразить причину одной фразой. Давайте рассмотрим популярные варианты, и я объясню, что именно мне в них не нравится.
convoluted
21 авг. 2017 / 12:29
Надо научиться видеть скрытые экономические процессы за вспышкой национального гнева

Надо научиться видеть скрытые экономические процессы за вспышкой национального гнева

При полном отсутствии бюджетного жилищного строительства, целые аулы оседают в ветхих домишках, сквозь заборы которых насмешливо возвышаются башни "коктемов", "риц карлтонов" и "есентаев".
niyazov
19 авг. 2017 / 11:16
  • 2620
  • 68
Казахский язык выбирает алфавит, который считает необходимым. Дело не в латинице

Казахский язык выбирает алфавит, который считает необходимым. Дело не в латинице

У русскоязычных казахов два варианта, один - срочно отдавать детей в казахские школы, если видят их будущее в стране. Русскоязычным неказахам ещё меньше выбора. Надо становиться казахами.
Aidan_Karibzhanov
22 авг. 2017 / 18:08
  • 2463
  • 60
В Кокшетау строят два парка для молодёжи. Будут учтены интересы и любителей спорта

В Кокшетау строят два парка для молодёжи. Будут учтены интересы и любителей спорта

Общая площадь парка составляет 25 гектаров. На территории предусмотрено устройство прогулочных дорожек, площадок для установки аттракционов и павильонов различного назначения, цветников.
zhasakmola
17 авг. 2017 / 17:13
  • 2221
  • 1