|
Cложная конструкция оператора %IF%
|
|
| Dizzer | Дата: 28 Мая 2007, 14:31 | Сообщение # 1 |  ● ● ● ● ● 18 сообщений Статус: Offline | Задача проста: в зависимости от значения $PAGE_ID$ (выбраной страницы) вывести кусок кода вместо [BODY], и если ни одно условие не было выполнено, то вывести [BODY] Подскажите как реализовать эту задачу? Пробовал такой вариант: | Code | <!--Страница1--> %IF($PAGE_ID$=sitePage1)%$RCODE_1$%ELSE% <!--Страница2--> %IF($PAGE_ID$=sitePage2)%$RCODE_2$%ELSE% <!--Страница3--> % IF($PAGE_ID$=sitePage3)%$RCODE_3$%ELSE% ...... .... <!--Страница9--> %IF($PAGE_ID$=sitePage9)%$RCODE_9$%ELSE%
[BODY]
%ENDIF% %ENDIF% %ENDIF% ...... .... %ENDIF% | При 8-ми условиях внутри такой конструкции всё работает отлично, при добавлении 9-го - работает но на сайте пропадают комментарии в новостях, в фотоальбоме, в статьях, в общем везде где есть комментарии. При 10-ти десятое уже не выполняется и [BODY] тоже. Предлагали ещё вариант: | Code | %IF($PAGE_ID$|=sitePage3|=sitePage4|=sitePage5|=sitePage6)% %IF($PAGE_ID$=sitePage3)%$GLOBAL_PAGE1$%ENDIF% %IF($PAGE_ID$=sitePage4)%$GLOBA L_PAGE2$%ENDIF% %IF($PAGE_ID$=sitePage5)%$GLOBAL_PAGE3$%ENDI F% %IF($PAGE_ID$=sitePage6)%$GLOBAL_PAGE4$%ENDIF% %ELSE%[Твой BODY]%ENDIF% | Но этот вариант не заработал. Выслушаю ваши варианты. Заранее спасибо. | | |
|
| Andre | Дата: 28 Мая 2007, 14:54 | Сообщение # 2 |  ● ● ● ● ● 1822 сообщения Статус: Offline | У тебя лишние сравнения. Достаточно: %IF($PAGE_ID$=sitePage1)%$RCODE_1$%ENDIF% ... %IF($PAGE_ID$=sitePage10)%$RCODE_10$%ENDIF% Тебе правильно ответили, это ты забыл вставить то, что тебе нужно. | | |
|
| Dizzer | Дата: 28 Мая 2007, 15:06 | Сообщение # 3 |  ● ● ● ● ● 18 сообщений Статус: Offline | Andre, ну как же правильно, смотри: Допустим $PAGE_ID$=sitePage1 | Code | %IF($PAGE_ID$=sitePage1)%$RCODE_1$%ENDIF .... %IF($PAGE_ID$=sitePage10)%$RCODE_10$ %ELSE%[BODY]%ENDIF% | выполнится и $RCODE_1$ и [BODY] а нужно чтобы [BODY] выполнялось если не совпало не одно условие... Может я что-то не догоняю, но по логике так  | | |
|
| kydapodatsya | Дата: 28 Мая 2007, 15:21 | Сообщение # 4 |  ● ● ● ● ● Дизайнер 2557 сообщений Статус: Offline | Dizzer, так вставь как тебе советуют, только дополни | Code | %IF($PAGE_ID$=sitePage1)%$RCODE_1$%ENDIF% ... %IF($PAGE_ID$=sitePage10)%$RCODE_10$ %ELSE% [Твой BODY]%ENDIF% |
| | |
|
| Dizzer | Дата: 28 Мая 2007, 15:31 | Сообщение # 5 |  ● ● ● ● ● 18 сообщений Статус: Offline | kydapodatsya, вы имеете ввиду вместо [BODY] так и вставлять [Твой BODY]? Или я всё ещё не могу въехать?Добавлено (2007-05-28, 15:31) --------------------------------------------- kydapodatsya, | Quote (kydapodatsya) | | Code %IF($PAGE_ID$=sitePage1)%$RCODE_1$%ENDIF% ... %IF($PAGE_ID$=sitePage10)%$RCODE_10$ %ELSE% [BODY]%ENDIF% | Ну вот логически: если sitePage1 то выполнится $RCODE_1$ в конце $PAGE_ID$ не будет равнятся sitePage10 соответственно выполнится [BODY]. Разве я не правильно мыслю? | | |
|
| kydapodatsya | Дата: 28 Мая 2007, 15:46 | Сообщение # 6 |  ● ● ● ● ● Дизайнер 2557 сообщений Статус: Offline | | Quote (Dizzer) | | kydapodatsya, вы имеете ввиду вместо [BODY] так и вставлять [Твой BODY]? | нет конечно [BODY] | | |
|
| Andre | Дата: 28 Мая 2007, 17:42 | Сообщение # 7 |  ● ● ● ● ● 1822 сообщения Статус: Offline | Значит в условие, где нужен боди вставляй все возможные варианты названий страниц где он должен быть: %IF($PAGE_ID$=sitePage1|=sitePage2....)%$BODY$%ENDIF% , но кол-во их не должно быть больше 5, а $BODY$, как помню писать два раза нельзя. Мне кажется ты, что-то нето мудришь, все это явно можно сделать по другому, более легко. Каждую проблему можно по разному решить, ты выбрал "через жопу", и спрашиваешь нас "как лучше в эту жопу попасть?", а наверняка есть другой способ  | | |
|
| Dizzer | Отредактировал Dizzer - Вторник, 29 Мая 2007, 07:27 Дата: 29 Мая 2007, 07:24 | Сообщение # 8 |  ● ● ● ● ● 18 сообщений Статус: Offline | Andre, Ну вот я и спрашиваю, как зайти через другой вход? Нужна конструкция: если СТРАНИЦА=1 то ПЕЧАТАТЬ "страница 1" если СТРАНИЦА=2 то ПЕЧАТАТЬ "страница 2" .... если СТРАНИЦА=10 то ПЕЧАТАТЬ "страница 10" если небыло совпадений ПЕЧАТАТЬ "страница неизвестна" На выходе имеем: печатает "страница ХХ", либо, если не одно условие не выполнено выводится "страница неизвестна". Очень простая задача, а вот не получается разрулить. А использую её в конструкторе шаблонов. Вставляю её вместо [BODY] чтобы вместо | Code | Тут будет любая ваша информация...
Изменить этот текст можно в панели управления, раздел "Управление дизайном". | выходила нужная мне информация. Делаю именно так, чтобы при изменении в шаблоне и нажав кнопку "Создать шаблоны" не нужно было переделывать вручную страницы, а благодаря этой конструкции автоматом на нужных страницах выводилась нужная инфа. Andre, может есть решение этой задачи другим способом?  | | |
|
| DuboloM | Дата: 29 Мая 2007, 08:44 | Сообщение # 9 |  ● ● ● ● ● 739 сообщений Статус: Offline | А если так? <style> #page1,#page2, ... , #page10 {display:none} </style> <div id="page1">$GLOBAL_PAGE1$</div> <div id="page2">$GLOBAL_PAGE1$</div> ... <div id="page10">$BODY$</div> <script> var pageId = $PAGE_ID$; for(i = 1; i = 11; i++) { if(pageId == 'sitePage' + i) document.getElementById('page' + i).style.display='block'; } </script> Хотя с утра мог и вообще не в тему написать Если что, не бейте  | | |
|
| Dizzer | Дата: 29 Мая 2007, 09:15 | Сообщение # 10 |  ● ● ● ● ● 18 сообщений Статус: Offline | Идея хорошая, жаль не сработала и тут [BODY] не так употребляется, в твоем премере предпологается что [BODY] будет выведен если id="page10", а его нужно выводить во всех случаях если не произошло совпадений внутри цикла. При совпадении внутри цикла можно выходить из него, чтобы быстрее грузилось. И ещё одно, как я понял тут загружаются все страницы сразу только не отображаются, и при выборе пункта меню они лишь становятся видимыми, но т.к. размер страниц может быть большим, то загрузка может подзатянуться надолго Интересно если пользовать IF($PAGE_ID$=sitePage1) then document.write('$GLOBAL_PAGE1$'); Будет ли обработана юкозом $GLOBAL_PAGE1$ ? | | |
|
| Andre | Дата: 29 Мая 2007, 12:12 | Сообщение # 11 |  ● ● ● ● ● 1822 сообщения Статус: Offline | Dizzer, из твоего ТЗ лично я ни черта не понял. Для чего тебе это нужно, где ты это хочешь получить, что за блоки "$GLOBAL_PAGE1$"? Почему это нельзя сделать на разных страницах. И уж полный бред писать это в "конструкторе шаблонов", тамже голову в результате сломать можно. | Quote (Dizzer) | | печатает "страница ХХ" | на принтер чтоль? | | |
|
| DuboloM | Дата: 29 Мая 2007, 15:43 | Сообщение # 12 |  ● ● ● ● ● 739 сообщений Статус: Offline | | Quote (Dizzer) | Интересно если пользовать IF($PAGE_ID$=sitePage1) then document.write('$GLOBAL_PAGE1$'); Будет ли обработана юкозом $GLOBAL_PAGE1$ ? | Ты неправильно написал, но в любом случае - вроде не будет, хотя хер их знает, этих красных шапочек | Quote (Dizzer) | | и тут [BODY] не так употребляется, в твоем премере предпологается что [BODY] будет выведен если id="page10", а его нужно выводить во всех случаях если не произошло совпадений внутри цикла. | А переделать слабо было?! <style> #page1,#page2, ... , #page10 {display:none} </style> <div id="page1">$GLOBAL_PAGE1$</div> <div id="page2">$GLOBAL_PAGE2$</div> ... <div id="page10">$BODY$</div> <script> var pageId = $PAGE_ID$; for(i = 1; i = 10; i++) { if(pageId == 'sitePage' + i) { document.getElementById('page' + i).style.display='block'; break; }else{document.getElementById('page10' ).style.display='block'; }} </script> | Quote (Dizzer) | | , жаль не сработала | х.з. - я проверять не буду. | Quote (Andre) | | я ни черта не понял | Согласен - бред какой-то - давно бы уже все руками понавставлял. | | |
|
| Dizzer | Дата: 31 Мая 2007, 03:15 | Сообщение # 13 |  ● ● ● ● ● 18 сообщений Статус: Offline | Задача решина. Можно тему закрывать Вмесло сложных условий вставляю обычные: <!--Гланая страница--> %IF($PAGE_ID$=sitePage1)%[BODY]%ENDIF% <!--Страница2--> %IF($PAGE_ID$=sitePage2)%$RCODE_2$%ENDIF% <!--Страница3--> % IF($PAGE_ID$=sitePage3)%$RCODE_3$%ENDIF% ...... .... <!--Страница9--> %IF($PAGE_ID$=sitePage9)%$RCODE_9$%ENDIF% применяю этот каркас только к "редактору страниц" И ещё один каркас, точно такой же, только в нём нет этих условий, а просто [BODY], применяю его ко всем остальным модулям. Небольшая путаница в сохраненых каркасах но всё же работает  | | |
|