• 2750
  • 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
321

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

Комментарии

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

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

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

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

Школа High Tech High – дети здесь самостоятельны так же, как и профессионалы в офисах

Школа High Tech High – дети здесь самостоятельны так же, как и профессионалы в офисах

Известный казахстанский бизнесмен становится первопроходцем и создает школу, о которой можно только мечтать. То, что мы, как взрослые, делаем в бизнесе, дети будут делать в этой школе.
Zhumanova
24 апр. 2017 / 16:29
  • 19718
  • 3
Как выбрать новостройку в Алматы: инсайты, критерии и личный опыт

Как выбрать новостройку в Алматы: инсайты, критерии и личный опыт

Я прекрасно понимаю тех, кто долго ищет подходящую квартиру - сама искала, потратила на поиск 1,5 года. Что, прежде всего, повлияло на мой выбор при покупке квартиры в новостройке Алматы?
Zhumanova
21 апр. 2017 / 10:04
  • 3787
  • 12
«Третья мировая война начнётся в мае 2017 года» – провидец из Португалии

«Третья мировая война начнётся в мае 2017 года» – провидец из Португалии

Провидец из Португалии по имени Горацио Вильегас считает, что новая мировая война состоится уже в текущем году. Считается, что португалец два года назад объявил, что Трамп станет президентом.
Seattle
21 апр. 2017 / 15:33
  • 3629
  • 13
Кому в Казахстане жить хорошо? Почему мы остаёмся в топ-5 стран мира по числу самоубийств

Кому в Казахстане жить хорошо? Почему мы остаёмся в топ-5 стран мира по числу самоубийств

Всё ли так хорошо у жителей Казахстана? Почему-то наша страна сохраняет твёрдые позиции в первых строчках мировых рейтингов по числу самоубийств.
openqazaqstan
24 апр. 2017 / 16:54
  • 3233
  • 19
«А ты покушала?» или Как завоевать сердце женщины простой заботой

«А ты покушала?» или Как завоевать сердце женщины простой заботой

Так как опыт хождения по свиданиям у меня немаленький, да и с интуицией давно дружу, я быстро отсеиваю тех, с кем будут проблемы. Как я это определяю? Очень просто.
Bonittta
22 апр. 2017 / 14:10
Депутат сената Айтимова: «Не нужно критиковать депутатов, так как вы сами их избирали»

Депутат сената Айтимова: «Не нужно критиковать депутатов, так как вы сами их избирали»

Наши депутаты известны не достижениями и работой, а своими высказываниями. Сегодня в СМИ вышла новость, где депутат сената Бырганым Айтимова ответила на критику народа.
tala03
20 апр. 2017 / 13:44
  • 2590
  • 20
Каждую ночь я жду его. Почти каждую ночь он оправдывает мои ожидания

Каждую ночь я жду его. Почти каждую ночь он оправдывает мои ожидания

Каждую ночь я жду его. Такая уж у него работа, он приходит поздно. Но почти каждую ночь он оправдывает мои ожидания. Когда его долго нет, признаюсь, я начинаю нервничать. Названивать и писать смс-ки...
DominaOmnium
21 апр. 2017 / 2:25
  • 2430
  • 12
Советы бывалого: выбираем надежную систему денежных переводов и хранения денег

Советы бывалого: выбираем надежную систему денежных переводов и хранения денег

Какую систему выбрать для денежных переводов внутри СНГ и как избежать потерь при девальвации. В общем, берегите свои кровно заработанные, помните...
Pablo13
20 апр. 2017 / 16:00
  • 2374
  • 19
Атбасарская дамба: кто так красиво сэкономил 137 миллионов?

Атбасарская дамба: кто так красиво сэкономил 137 миллионов?

История с разрушенной атбасарской плотиной получила интригующее продолжение. На официальном уровне говорят о 200 млн тенге, в то время как районный аким сообщил, что дамбу строили совсем за другие деньги.
openqazaqstan
20 апр. 2017 / 15:10
  • 2198
  • 14