2009 7 березня 2009

Виклик кількох OnLoad для Windows функції в Javascript

Херес ще один маленький peice обману Javascript, що мені довелося копирсатися, тому що ситуація commaned він. В одному з моїх веб-сайтів, у мене була ситуація, коли я повинен був здійснювати "windows.onload" в два рази. Перше, що б прийшли до недосвідчений розум, як у мене (у мене чесно сказати, що, оскільки я використовую JavaScript рамки і бібліотеки, я forgotton робити прості речі, на мій власний ... Сумно, але факт), є наступний метод ...

 window.onload = onloadfn1;
 window.onload = onloadfn2;
 window.onload = onloadfn3;
 і т.д. ..

Вибачте, що говорю, але це не буде працювати ... не хочу, щоб обговорити виконання науки Javascript багато ... але за моїми недавнім досвідом, тільки остання функція (onloadfn3) буде погано насправді будуть виконуватися.

У нормальній ситуації, на відміну від моєї (про які я розповім трохи пізніше) ... ви можете зробити одне з наступних дій, щоб виконати mutliple функції OnLoad ....

Або щось на зразок цього

 Функція doOnLoad () {
         onloadfn1 ();
         onloadfn2 ();
         onloadfn3 ();
 }
 window.onload = doOnLoad;

Для моєї нинішньої ситуації, я не можу використовувати будь-який з зазначених вище ...
Чому мені потрібно зателефонувати windows.onload двічі, а що виклик двох функцій в рамках однієї функції OnLoad? Ось швидкий погляд на мої постановки задачі ...

"Мої сторінки сайту структуровані як тема WORDPRESS .... тобто загальна header.php і footer.php, який отримує включені у всі сторінки сайту. Існує implementaion OnLoad функції в footer.php, щоб зробити деякі загальні функції OnLoad. І є кілька сторінок, які повинні щось своє OnLoad, крім тих, зробити загальні функції OnLoad. Якщо я призначити функцію зворотного виклику безпосередньо на window.onload обробник, він буде по-їхати раніше призначеного зворотного виклику в footer.php "

.... Моя проблема розуміється :) ?

Ну! Є кілька рішень, які я знайшов. Всі вони дуже схожі, і головним чином implementions вирішення даної Саймон Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Рішення:

Просто додайте цей код JavaScript на сайті ...

 Функція addLoadEvent (функції) {
     УАГ oldonload = window.onload;
     якщо (TypeOf window.onload! = 'функція') {
        window.onload = функція
     {} Інше
        window.onload = функція () {
            якщо (oldonload) {
                   oldonload ()
           }
           функції ()
        }
    }
 }

І називати його замість звичайного "windows.onload"

 addLoadEvent (FunctionToRunOnPageLoad);
 addLoadEvent (функція () {
 / * Більше коду, щоб запустити на сторінці завантаження *
 }); 

Переваги цей фрагмент коду ...
1. У першу чергу, це дозволяє мати кілька подій windows.onload, викликається з окремих частин коду, без overridding попереднє визначення
2. Це дуже ненав'язливо. Це може бути поміщений в файл з іншими сценаріями, або в окремому файлі.
3. Це працює, навіть якщо window.onload вже встановлений.


2008 20 вересня 2008

TEXTAREA Згорнути проблема в XSL / XSLT


Постановка завдання:
Я зіткнувся з цією проблемою щодо прокручуємо в XSLs. Говорячи простими словами, проблема виникає тоді, коли у вас є порожні теги <textarea>, то він завалиться його <textarea />.
тобто якщо у вас щось на кшталт такого в XSL і XML дані значення TEXTAREA, нічого не повертає ...

<textarea name='description'> <xsl:value-of select="DESCRIPTION"/> </ TEXTAREA>

Як браузери не визнають цього, це призведе до решти вигляді HTML бігти в текстовій області.

Можливі рішення:

В XSL, додати нерозривний-просторі () після того, XSL: Значення tag.BEWARE, щоб подбати про це додатковий простір додані під час перевірки на стороні клієнта в цій галузі.

<textarea name='description'> <xsl:value-of select="DESCRIPTION"/> </ TEXTAREA>

Або
<xsl:value-of select="concat (DESCRIPTION,'')"/>

Або
Вставте <xsl:value-of select="@unknown" /> тег, що вказує на невідомий атрибут. Це змусить парсер PHP XSLT для створення області відкриття і закриття текст тега, навіть якщо вона не має нічого між ними.

Або
Вставте <xsl:text> поле, що містить простір, щоб змусити закриває тег.

Однак, незважаючи на вищевказані рішення, здавалося б вирішити цю проблему, я все ще не впевнені, що вони мають рацію, і кращий спосіб це виправити. Якщо є інші кращий спосіб виправити цю особливість, будь ласка, повідомте нам.


2008 14 вересня 2008

Різноманітність умов XSL випробувань (Збори XSL: IF і XSL: коли умови TEST)

Кожен раз, коли я повинен зробити, XSL: IF або XSL: Коли тест, у мене є повернутися до довідників. Я не пам'ятаю їх. Думка, що буде більше там, як і я, хто волів би, щоб всі з них, можливо, в одному місці, готові бути передані в міру необхідності.

Для тих, хто новий ... Синтаксис для XSL: IF

<xsl:if test="expression">
<- Содержание: шаблони ->
</ XSL: якщо>

XSL: якщо / XSL: при тестовій колекції
Нижче умови є простим і зрозумілим. Тому я вважаю, це не буде потрібно багато пояснень

<xsl:if test="position()=last()-1">
Це, якщо останній, але один елемент в списку!
</ XSL: якщо>

<xsl:if test="SALARY> 5000 ">
Зарплата цієї людини більше рупій. 5000
</ XSL: якщо>

<xsl:if test="count(JOBS)> 3 ">
Є більш ніж на 3 робочих місць в цьому списку!
</ XSL: якщо>

<xsl:if test="(@DEPT ='SALES') або (@JOINYEAR = '1997')">
Ця людина з відділу продажів або його роком З'єднання зараз 1997
</ XSL: якщо>

<xsl:if test="EXPERIENCE">
Ця людина є хоча б один ДОСВІД дочірній елемент.
</ XSL: якщо>

<xsl:if test="@HOBBY">
Людина має хобі атрибут.
</ XSL: якщо>

Ті ж умови тексту можуть бути використані для XSL: ВИБІР / XSL: КОЛИ, а також

XSL: вибрати

XSL XSLT в: виберіть інструкція схожа на XSL: якщо, але має кілька відмінностей ключ:
• Один XSL: виберіть елемент може перевірити кілька умов і додавати різні вузли в дереві результатів на основі яких умова істинна.
• XSL: виберіть елемент може мати шаблон за замовчуванням, щоб додати до того дереву, якщо ні одна з умов. (Порівняйте XSL: якщо, який не має аналогів в "інший" стану).
• XSL: виберіть елемент має певні дочірні елементи, які необхідні для того, щоб працювати, а ви можете поставити будь правильно сформований елементи, які ви хочете всередині XSL: якщо елемент.

<xsl:choose>
<xsl:when test="boolean-expression">
Зробіть що-небудь, коли це логічне-вираз TURE
</ XSL: коли>
<xsl:otherwise> Зробіть що-небудь інше </ XSL: інакше>
</ XSL: виберіть>


2008 13 серпня 2008

Розмітка з роздільниками рядків в XSL

Якщо вимога розділити значення вузла в XML, який містить рядки з роздільниками вартості, в окремі пункти, то ви прийшли в потрібне місце ... подивимося на прикладі, наведеному нижче. Якщо ви знайомі з трохи XML і XSL ... Я не думаю, що вам буде потрібно ніяких пояснень.
Крім того, цей приклад включає використання функції як XSL XSL: виклику шаблонів, XSL: підрядка до, XSL: підрядка, після цього, якщо це те, що ви після цього.

XML повинні бути перетворені (food.xml): -
Припустимо, що завдання для розбиття рядка розділених комами, в теге "ключові слова"

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<keywords>Fruits, Vegetables, Pulses, Meat, Cereals </keywords>
</food>

XSL (food.xsl): -

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>XSL 1.0 Delimited String Tokeniser</title>
</head>
<body>
<xsl:value-of select="food/meta"/>
<div >
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="food/keywords" />
<xsl:with-param name="delimitr" select="','" />
</xsl:call-template>

</div>
</body>
</html>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="string" />
<xsl:param name="delimitr" />
<xsl:choose>
<xsl:when test="contains($string, $delimitr)">
<div style="border:1px solid red;">
<h3><xsl:value-of select="substring-before($string,$delimitr)" /></h3>
<xsl:variable name="data" select="substring-before($string,$delimitr)"/>
</div>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="substring-after($string, $delimitr)" /><xsl:with-param name="delimitr" select="$delimitr" /></xsl:call-template>
</xsl:when>
<xsl:otherwise>
<div style="border:1px solid red;">
<h3><xsl:value-of select="$string" /></h3>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Результуючий вихідний HTML: -

<div>
<div style="border: 1px solid red;">
<h3>Fruits</h3>
</div>
<div style="border: 1px solid red;">
<h3> Vegetables</h3>
</div>
<div style="border: 1px solid red;">
<h3> Pulses</h3>
</div>
<div style="border: 1px solid red;">
<h3> Meat</h3>
</div>
<div style="border: 1px solid red;">
<h3> Cereals </h3>
</div>
</div>

Зайве говорити ... просто змініть параметр "delimitr" в роздільник на ваш вибір


2008 4 серпня 2008

Проблема з позиції () в XSL ... чи ні?

У мене була ця проблема strage при створенні XSL сьогодні. Подивився відповіді всій мережі, але не міг знайти .... Насправді я думаю! Я знаю, що вм'ятина моя проблема була, так що мені шукати?

У всякому разі! Тільки у випадку, якщо у вас є ця ж проблема і якось занадто силою змусити вас вдалося посадити на цій сторінці ... Ви мене дякувати тонн ... І якщо ви випадково приземлився на цій сторінці, з незрозумілої доля і ви будете Розробник XSL, DO Запишіть це зараз, НА МАЙБУТНЄ причина, якщо в один прекрасний день, ви стикаєтеся з цією проблемою, то сила не може бути з вами.

Постановка завдання:
У мене є XML, де є два вузли з декількома елементами в ньому і елементи між цими двома вузлами мають взаємно однозначна відповідність. У наведеному нижче прикладі, кожен елемент у вузлі <array name="PLAYURL" /> відноситься (відповідне положення) елемент у вузлі <array name="SITENAME" />

<?xml version="1.0" encoding="utf-8"?>
<myplaylists>
<playlist>
<title>Best of Rest </title>
<array name="SITENAME">
<str>www.musicindiaonline.com</str>
<str>www.dhingana.com</str>
<str>www.raaga.com</str>
<str>www.smashits.com</str>
<str>www.desimusic.com</str>
<str>www.musicplug.in</str>
</array>
<array name="PLAYURL">
<str>http://www.musicindiaonline.com/123/</str>
<str>http://www.dhingana.com/play/123</str>
<str>http://www.raaga.com/123</str>
<str>http://ww.smashits.com/123</str>
<str>http://www.desimusic.com/123</str>
<str>http://www.musicplug.in/123</str>
</array>
</playlist>
</myplaylists>

Тепер у мене є цикл, де я циклі <array name="SITENAME">, і я хочу, щоб отримати відповідний пункт (на відповідну позицію) в <array name="PLAYURL">,

Що б ви normaly спробувати зробити, це ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
play from : <a href="{../../array[@name='PLAY']/str[position()]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Вибачте! Це не підходить ... Ах! Surpised ...

Тепер ви, мабуть, хочете спробувати, щось на зразок цього ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos"> <xsl:value-of select="position()"/></xsl:variable>
play from : <a href="{../../array[@name='PLAY']/str[$pos]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

І знову це не буде працювати ... Тепер вас чесати потилицю, намагаючись зв'язатися з кожного, хто ви думаєте, знає кілька XSL і може бути будь-якої допомоги ... Ви намагаєтеся будь-який інший варіант ... і все ж це не буде працювати ... Ну! Ось що трапилося зі мною, принаймні ...

DONT зневіряйтеся! Спробуйте це

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$ pos-int ]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Не питайте мене, чому це ПРАЦЮЄ. Тому що я не маю права причина ... якщо ви робите! Будь ласка видалити коментар. Це може бути дуже корисним. Крім того! якщо у вас є кращу назву для цієї посади, зробити напишіть мені :)


2008 2 серпня 2008

Установка DOCTYPE в XSL

Минулого тижня я створив progessive HTML / CSS макет для клієнта, тестував в IE6, IE7 і FF 3, здавалося, прекрасно ... ПОКИ! макет пішов далі вниз по manufacting циклу. Це не вдалося. Елементи макета сторінки просто пішов всюди, коли макет HTML був перетворений в XSL і XML застосовується до нього ... Ледар!

Не можу спати нормально в минулі вихідні, напередодні понеділка вранці, коли я повинен буду вирішити цю SH **. Але тепер є трохи Experince в боротьбі з такого роду ситуаціями (Browser сумісності, я маю на увазі), я знав, що було пов'язано з не що інше, DOCTYPE .... і це було ...

Проблема:
Ви хочете, щоб контроль над DOCTYPE, так як ваша трансформація буде включати в себе за замовчуванням DOCTYPE явним, і макет буде за жеребкуванням.

Рішення:
Специфікації XSLT надає методи виведення для установки в DOCTYPE вибір. Крім того, для нас інтерфейсу розробники, теми, що представляють інтерес був би HTML методів виведення та методи виведення XML .

Ну! перш ніж ви отримаєте нудно, от виправлення.

Для, наприклад, якщо у вас такі DOCTYPE в HTML-версії. -

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Потім в XSL ви повинні були б мати наступне: -

<xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/loose.dtd" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="yes" />

і, нарешті! Як переконатися, що ваш вихід XSLT підпорядковується DOCTYPE ви обрали.


2008 4 травня 2008

Включіть в XSL XSL

Якщо XML / XSL перетворення ваш Доміан, тобто часи, коли ми хочемо peice динамічного коду, який буде використовуватися бібліотека пункту (буде зроблено повторного використання). Що я маю на увазі, ймовірно, можна було б зробити більш ясною в цьому прикладі сценарію.

Уявіть, що ви створюєте веб-сайт (з використанням XML, XSL transfroms звичайно ж), і більшість із сторінок матиме модуль коментарів. Ну! то або скопіювати або вставити цей код в кожну сторінку шаблону (який я не маю сказати, але зробити технічне обслуговування та доопрацювання кошмар), або навіть краще, ви створюєте INCLUDE файл, який може вирватися в тому, де б Ви не хочете його в вашу сторінку ( а) ...
Так як ми створюємо файл XSL INCLUDE і включити його в інший файл XSL? Ось як ...

Просто щоб було зрозуміло ... Ось короткий список файлів, які ви можете створити ... от, ми будемо в тому числі інформацію про фруктах і овочах в батьківській сторінки називають їжею.

1. food.xml - XML-файл даних, на яких перетворення будуть застосовуватися
2. food.xsl - основний файл XSL, який перетворить наш food.xml
3. inc_fruits.xsl - XSL включає файл, який буде надавати фрукти даних
4. inc_vegtables.xsl - XSL включає файл, який буде надавати vetetables даних

Я не думаю, що я багато в чому пояснюють, коди для вищевказаних елементів, будуть зрозумілі ...

FOOD.XML


<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>

<vegetables>
<item name="spinach" moreinfo="http://www.spinach.com">Spinach is full of iron</item>
<item name="asparagus" moreinfo="http://www.asparagus.com">Asparagus contains loads of vitamin D </item>
<item name="fenugreek" moreinfo="http://www.fenugreek.com">Fenugreek is rich in vitamin C</item>
</vegetables>
</food>


FOOD.XSL


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="inc_fruits.xsl" />
<xsl:include href="inc_vegetables.xsl" />
<xsl:template match="/">
<html>
<head>
<title>Title</title>
</head>
<body>
<h3><xsl:value-of select="/food/description" /></h3>
Modification Date : <xsl:value-of select="/food/date" />
<hr/>
<h5> About Fruits</h5>
<xsl:call-template name="about_fruits"/>

<hr/>
<h5> About Vegetables</h5>
<xsl:call-template name="about_vegetables"/>

<hr/>
</ Body>
</ Html>
</ XSL: шаблони>
</ XSL: стиль>


INC_FRUITS.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_fruits">
<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


INC_VEGETABLES.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_vegetables">
<xsl:for-each select="/food/vegetables/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Завантажити всі вищевказані файли тут (252 скачувань)


2008 4 квітня 2008

Робота з атрибутами XML вузлів в XSLT

Якщо ви використовуєте XML і XSL, то ви могли зустріти той час, коли потрібно грати з атрибутами і значеннями вузлами ви XSL. Вони навантажень сайтів довго намотується інформацію про це, але ніхто не знайшов були короткими і точними ... Це не XML / XSL підручника, але мої спроби поставити разом, якийсь обман список ...

Зразок XML, що ми будемо працювати з виглядає наступним чином ...

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>
</food>

Отже, давайте починати перетворення наших вище XML за допомогою XSL

Приклад 1: Виведення значення в обраних атрибутів

<xsl:value-of select="/food/fruits/item[@name='orange']" /><br />
to get more information about <a href="{/food/fruits/item[@name='orange']/@moreinfo}" target="new" ><xsl:value-of select="/food/fruits/item[@name='orange']/@name" /> </a>

HTML результат буде виглядати

Orange is the color and rich in vitamin C,
to get more information about <a href="http://www.orange.com" target="new">


Приклад 2: Цикл через та відображення XML всі імена атрибутів і їхніх значень

<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>,
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>

HTML результат буде виглядати


attribute name : name, attribute value : mango
attribute name : moreinfo, attribute value : http://www.mango.com
attribute name : name, attribute value : banana
attribute name : moreinfo, attribute value : http://www.banana.com
attribute name : name, attribute value : orange
attribute name : moreinfo, attribute value : http://www.orange.com
attribute name : name, attribute value : Papaya
attribute name : moreinfo, attribute value : http://www.papaya.com


Завантажити всі вищевказані файли тут (245 скачувань)



Дивитися це простір, я буду оновлювати цей нових висновків ...


NDK будинку | Висловлюючи IT | Висловлюючи неба | Висловлюючи Penmenship | Висловлюючи трепет | виразити себе