Saturday, 13 December 2008

nginx: ssi for

Представляю патч который реализует комманды for и endfor.

Пример использования:

На входе имеем sample.html:

<!--# set var="test" value="muha ha hi" --><!--# for data="test" var="string" sep=" " -->   
<p>T: <!--# echo var="string" --></p><!--# endfor -->   
<!--# set var="test" value="muha ha he " --><!--# for data="test" var="string" sep=" " -->  
<p>T: <!--# echo var="string" --></p><!--# endfor -->   
<!--# set var="test" value="muha ha hah" --><!--# for data="test" var="string" sep=" " -->  
<p>T: <!--# echo var="string" --></p><!--# endfor -->   
<!--# set var="test" value="muha ha huh " --><!--# for data="test" var="string" sep=" " --> 
<p>T: <!--# echo var="string" --></p><!--# endfor -->   
<!--# set var="test" value="abc " --><!--# for data="test" var="string" sep=" " --> 
<p>T: <!--# echo var="string" --></p><!--# endfor -->   
<!--# set var="test" value="cba" --><!--# for data="test" var="string" sep=" " -->  
<p>T: <!--# echo var="string" --></p><!--# endfor -->   
<!--# set var="test" value="1 2" --><!--# for data="test" var="string" sep=" " -->  
<p>T: <!--# echo var="string" --></p><!--# endfor -->   
<!--# set var="test" value="z x" --><!--# for data="test" var="string" sep=" " -->  
<p>T: <!--# echo var="string" --></p><!--# endfor -->   
<!--# set var="test" value="y" --><!--# for data="test" var="string" sep=" " -->    
<p>T: <!--# echo var="string" --></p><!--# endfor -->   
<!--# set var="test" value="q " --><!--# for data="test" var="string" sep=" " -->   
<p>T: <!--# echo var="string" --></p><!--# endfor -->   
<!--# set var="test" value="" --><!--# for data="test" var="string" sep=" " --> 
<p>T: <!--# echo var="string" --></p><!--# endfor -->
<!--# set var="test" value="     " --><!--# for data="test" var="string" sep=" " -->
<p>T: <!--# echo var="string" --></p><!--# endfor -->

На выходе получаем:

HTTP/1.1 200 OK 
Server: nginx/0.7.26    
Date: Sat, 13 Dec 2008 02:55:43 GMT 
Content-Type: text/html 
Transfer-Encoding: chunked  
Connection: keep-alive  


<p>T: muha</p>  
<p>T: ha</p>    
<p>T: hi</p>    

<p>T: muha</p>  
<p>T: ha</p>    
<p>T: he</p>    

<p>T: muha</p>  
<p>T: ha</p>    
<p>T: hah</p>   

<p>T: muha</p>  
<p>T: ha</p>    
<p>T: huh</p>   

<p>T: abc</p>   

<p>T: cba</p>   

<p>T: 1</p> 
<p>T: 2</p> 

<p>T: z</p> 
<p>T: x</p> 

<p>T: y</p> 

<p>T: q</p> 

<p>T: </p>      

<p>T: </p>
<p>T: </p>
<p>T: </p>
<p>T: </p>
<p>T: </p>

Для работы требуется иметь интерфейс реализованый в прошлом патче. А тут можно взять оба патча.

Параметры sep и var опциональны. Если нет sep то делится по (пробелу), а если нет var значение записывается в переменную _ (подчеркивание).

Write on: 6:06 | 4 comments | | tags: , , , | permalink |
Add post to:   Delicious Reddit Slashdot Digg Technorati Google


Add comment

Comments

Винокуров Илья 12.05.2009 18:33

Как задать в качестве разделителя перевод строки \r\n ?

reply
Kirill A. Korinskiy 14.05.2009 15:12

вставить эти символы в sep, именно CRLF а не \r\n

reply
fly-away 24.05.2009 2:29

Некисло так ) А есть у тебя патч для увеличения уровня вложенности if?

reply
Kirill A. Korinskiy 24.05.2009 18:58

Нет. Я хотел его написать, но проще обходиться без него. Например так:

<!--# set var="t" value="0" -->

<!--# if expr="${a} = test" -->
<!--# set var="t" value="1" -->
<!--# endif -->

<!--# if expr="${b} = test2" -->
<!--# set var="t" value="1${t}" -->
<!--# endif -->

<!--# if expr="${t} = 11" -->
а тут то что вы хотите
<!--# endif -->

:)

reply

Comment form for «nginx: ssi for»

Required. 30 chars of fewer.

Required.