Старая версия форума тут

Форумы » Программирование » Нужна помощь в редактировании скрипта

549
PlumLi
Здравствуйте, нужна помощь в редактировании скрипта редактора Tinymce.
Суть помощи добавить в модальное окошко установки ссылки чекбокс, который будет устанавливать rel="lightbox" в тело ссылки, т.е., галочка не стоит - не ставит, если стоит - то добавляет rel

за помощь обещаю вознаграждение 😀 $5 за 10 минут возни - думаю справедливо

скрипт [url=http://you-des.ru/advlink.js]тут[/url]

Отредактировано PlumLi - 21.11.2011
2970
Foggy
Написал в лс встречные вопросы. Попробуем разобраться.
2970
Foggy
Попробовал. Не вышло, прошу прощения. Пробовал бы дальше, но почему-то у меня файлы языка не включаются.
Задача реально непростая, ибо там функция в функции и их дофига. Кто будет дальше разбираться, упрощу задачу:

Всё нужное находится в папке jscripts\tiny_mce\plugins\advlink
Там файл link.htm и в подпапке js файл advlink.js
В первый после 62 строки ставится чекбокс
[spoiler][code] <tr>
<td><label id="lightbox-check-label" for="lightbox-check">Lightbox</label></td>
<td>
<input type="checkbox" name="lightbox-check" id="lightbox-check" onclick="тут будет вызываться нужная нам функция" />
</td>
</tr>[/code]
[/spoiler]
и в js файле прописывается функция, которая добавит rel="lightbox". но из-за сложности фреймворка у меня разобраться не вышло. Хотя сама функция технически не сложная. Главное найти переменные, которыми нужно облачать сей onckick.

[b]PlumLi[/b], ты настолько часто вставляешь картинки? а-то ведь можно во вкладке advanced через селектор выбрать этот параметр.

Отредактировано Foggy - 15.06.2012
549
PlumLi
в том то и дело, что там будут показывать образцы, и картинок на странице будет очень много...
6600
admiral
http://www.bibblan.com/martin/tinymce-rel-with-lightbox как вариант не пойдет? Ну по крайней мере в какую сторону смотреть и от чего отталкиваться)
549
PlumLi
сделал все как описано в статье, но проблема вышла на последнем этапе, когда мы через js меняем class="lightbox" на rel="lightbox", скрипт само собой размещен на странице где мы пытаемся кликнуть по картинке

вот его код:

[code]document.observe('dom:loaded', function () {
$$('a[class^=lightbox]').each(function(s) {
s.rel = 'lightbox';
});
});[/code]
почему не работает?

Отредактировано PlumLi - 22.11.2011
2970
Foggy
разве что попробовать разместить его на страничке link.htm, о которой я писал выше. ибо вставляется она фреймом.
549
PlumLi
а не на странице которая выводит эту картинку? не на index.php? по логике должно быть там
2970
Foggy
когда щёлкаешь на картинку ссылки, появляется блок, в котором загружается фрейм с файлом link.htm.
эта часть скрипта заменяет class галочки на её rel. а где она заменяет? если ты ставишь галочку в файле этого фрейма, то она заменяет в нём, а если в индекс, то до содержимого фрейма оно вряд ли дотянется. я, конечно, могу ошибаться в силу непонимания чего-либо, но мне кажется так.
549
PlumLi
ну может быть и так, только где у нас прописывается что картинка должна открываться в файле example.html, и где в этом файле тогда переменная картинки, в статье всего лишь жестко указан файл и имя ссылки:
[code]<div id="left">
<p>
A link with class starting with lightbox:
<a href="/image.jpg" class="lightbox">Click to see picture</a>
</p>
</div>[/code]

Отредактировано PlumLi - 23.11.2011
2970
Foggy
честно? понятия не имею.
549
PlumLi
Наверно проще тогда будет через пхп заменить все class="lightbox" на rel="lightbox"
6600
admiral
[quote=PlumLi]Наверно проще тогда будет через пхп заменить все class="lightbox" на rel="lightbox"[/quote]
Так это и должен делать скрипт за тебя) А с example.html лишь для примера дано, что бы проверить работу скрипта, переведи страничку в гугло переводчике, если что не понятно с переводом
6702
ZloVeЩиЙ
[b]Нужна помощь в доработке скрипта.[/b]
Собрал скрипт, который считает сколько: [b]лет, дней, часов, минут, секунд[/b] прошло от заданной даты в режиме реального времени \ без перезагрузки страницы + склонение виду: [b]1 день, 2 дня, 5 дней...[/b]

[img]http://imgs.su/tmp/2012-03-02/1330639352-616.jpg[/img]

[b]Вопрос:[/b] как каждый новый год к-во дней сбрасывать на 0? Тобишь, дней не должно быть более 365 \ 366.
Есть у кого какие соображения?

Отредактировано ZloVeЩиЙ - 02.03.2012
1007
BETEPAH
[quote=ZloVeЩиЙ][b]Нужна помощь в доработке скрипта.[/b]
Собрал скрипт, который считает сколько: [b]лет, дней, часов, минут, секунд[/b] прошло от заданной даты в режиме реального времени \ без перезагрузки страницы + склонение виду: [b]1 день, 2 дня, 5 дней...[/b]

[url]http://imgs.su/tmp/2012-03-02/1330639352-616.jpg[/url]

[b]Вопрос:[/b] как каждый новый год к-во дней сбрасывать на 0? Тобишь, дней не должно быть более 365 \ 366.
Есть у кого какие соображения?[/quote]
Если время считаете математикой, то так:
if(days == 366) {days = 0; year++}
А почему бы не вычислять разницу делением?
var milisecs = new Date() - new Date('2011, 8, 1');// отсчет от 1 сентября 2011
и делить затем на 1000, 60, 60, 24, 365/366
Можно встроить проверку количества високосных годов между датами, если надо. Алгоритм примерно следующий: берем целое число от деления количества годов текущей даты на 4 и вычитаем целое число от деления количества годов исходной даты на 4. Надо тестировать.

В общем, для полноты ответа хотелось бы увидеть код.

Отредактировано BETEPAH - 02.03.2012
6702
ZloVeЩиЙ
[b]BETEPAH[/b], спасибо за информацию и потраченное, на написание поста, время.
Весь скрипт выкладывать не буду, выложу основу может кому пригодиться:

[quote]<script type="text/javascript">
<!--Скрываем!

// 1 Января 2012 года - дата создания
// месяцы от 0 до 11
CreateDate = new Date(2012,0,1);

// сегодняшняя дата
NowDate = new Date();

// разница в миллисекундах
ResultDate = NowDate-CreateDate;

// перевод миллисекунд в дни
ResultDate=ResultDate/1000;
ResultDate=ResultDate/3600;
ResultDate=ResultDate/24;

// отбрасывание дробной части
with (Math) { ResultDate=floor(ResultDate);}
// теперь в переменной ResultDate общее количество дней

//считаем кол-во лет
Years=ResultDate/365;
with (Math) { Years=floor(Years);}

//считаем кол-во дней меньшее года
if (Years>0) {ResultDate=ResultDate-(Years*365);}

//считаем кол-во мес.
Months=ResultDate/30;
with (Math) { Months=floor(Months);}

//считаем кол-во дней меньшее мес.
if (Months>0) {ResultDate=ResultDate-(Months*30);}

//выводим сообщение
document.write(Years + " лет " + ResultDate + " дней");
document.write('<br>' + " и " + Months + " мес. ");

// Раскрываем!-->
</script>[/quote]
[quote][b]Один полный год == 365 дней;
Один полный месяц == 30 дней;[/b][/quote]
[b]Выведет на странице:[/b]

[i]0 лет 1 дней
и 2 мес.[/i]

[color=blue][b]P.S. [/b][/color]

[quote]Можно встроить проверку количества високосных годов между датами, если надо. Алгоритм примерно следующий: берем целое число от деления количества годов текущей даты на 4 и вычитаем целое число от деления количества годов исходной даты на 4. Надо тестировать.[/quote]
[b]01.[/b] Можешь показать на примере?
[b]02.[/b] Для полноты ощущений хотелось бы тогда и с месяцами точности. Как видно, я взял в среднем 30 дней == 1 месяцу, как заставить скрипт менять значение в зависимости от месяца (28, 29, 30 и 31 день) ?

Отредактировано ZloVeЩиЙ - 02.03.2012
1007
BETEPAH
[quote=ZloVeЩиЙ][quote]Можно встроить проверку количества високосных годов между датами, если надо. Алгоритм примерно следующий: берем целое число от деления количества годов текущей даты на 4 и вычитаем целое число от деления количества годов исходной даты на 4. Надо тестировать.[/quote]
[b]01.[/b] Можешь показать на примере?
[b]02.[/b] Для полноты ощущений хотелось бы тогда и с месяцами точности. Как видно, я взял в среднем 30 дней == 1 месяцу, как заставить скрипт менять значение в зависимости от месяца (28, 29, 30 и 31 день) ?[/quote]
В данном случае вычислять количество високосных годов между датами нет необходимости. Високосный год имеет влияние только в одном случае - если месяц конечной даты - март и при этом число начальной даты больше числа конечной даты. В остальных случаях значения не имеет.
Вот такой код у меня получился:
[code]function DateOffset(dd1, dd2) {
var d1, d2, y, m, d, dec_m = 0, dec_y = 0;
if(dd1>=dd2) {d1 = dd2; d2 = dd1} else {d1 = dd1; d2 = dd2}; // если вторая дата старше первой, меняем их местами.
var y_s = d1.getFullYear(),
y_e = d2.getFullYear(),
m_s = d1.getMonth(),
m_e = d2.getMonth(),
d_s = d1.getDate(),
d_e = d2.getDate();
d = d_e - d_s;
if (d_s > d_e) { // если число начальной даты больше числа конечной даты, количество дней между числами вычисляется по формуле: количество дней в предыдущем месяце - число начальной даты + число конечной даты.
d+= new Date(d2.getFullYear(), d2.getMonth(), 0).getDate(); // это количество дней в месяце, который идет перед месяцем конечной даты.
dec_m = 1 // месяц был не полный, так как d_s > d_e, поэтому нужно будет при вычислении количества месяцев отнять 1
}
m = m_e - m_s - dec_m;
if (m < 0) {
m += 12;
dec_y = 1 // год был не полный, поэтому при вычислении количества лет нужно будет отнять 1
}
y = y_e - y_s - dec_y;
return {'year':y, 'months':m, 'days':d}
}[/code]
Функция DateOffset принимает параметрами две даты и возвращает количество лет, месяцев и дней между этими датами. Я постарался по-максимому закомментировать, вроде должно быть понятно всё.
Посмотреть скрипт в действии можно [url=http://jsfiddle.net/BETEPAH/8zXjs/]здесь[/url].
3170
grom
[img]http://imgs.su/tmp/2012-03-03/1330751763-405.jpg[/img]
1007
BETEPAH
[quote=grom][url]http://imgs.su/tmp/2012-03-03/1330751763-405.jpg[/url][/quote]
Если Вы намекаете на валидацию вносимых данных, то ее нет, потому как в скрипте не предполагается использовать какие-либо элементы взаимодействия с пользователем. Я сделал инпуты лишь для удобства тестирования.
Если надо, проверку встроить легко, но скучно и не интересно, поэтому пусть допилит тот, кому это надо 😉
Неавторизованные и новички не могут отправлять сообщения.




© 2008-2020
Контакты | Группа | Privacy и Cookie | Правила