2010-12-08 6 views
8

के रूप में strlen मुझे smarty में स्वरूपण चर जारी कर रहा है। मैं सोच रहा था कि ऐसा करने का सबसे अच्छा तरीका क्या है। असल में मेरे पास एक स्ट्रिंग है "एबीसी | डेफग" मैं "डेफ" के सबस्ट्रिंग को पाने के लिए चतुराई चाहता हूं मैं इसे करने के बारे में कैसे जाऊं?स्मार्ट को स्ट्रॉप्स के साथ एक var के substring हो रहा है जैसे शुरू होता है और

{$var|substr:strpos:"|":strlen} 

काम नहीं करता है

+0

के बारे में अधिक पढ़ सकते हैं क्या आप आउटपुट के रूप में मिलता है? – BoltClock

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/4325283/smarty-substr-a-variable –

+0

देखें [यह] (http://www.smarty.net/forums/viewtopic.php?p=48137) Smarty विषय। –

उत्तर

25

बस इसे सेट किए बिना इसे हल किया गया पीएचपी में वापस, और अंतर्निहित फ़ंक्शन रैपर का उपयोग करके।

मानते हैं कि: $ var = "एबीसी | DEFGH";

{assign var="bar_at" value=$var|strpos:"|"} 
<li>{$var}</li> 
<li>{$var|substr:0:$bar_at}</li> 
<li>{$var|substr:$bar_at+1}</li> 

यह प्रिंट होगा:

  • एबीसी | DEFGH
  • एबीसी
  • DEFGH
  • +0

    हां! मुझे पता था कि गेटा एक रास्ता है! Thaks भाई! – kjy112

    4

    उन कार्यों चतुर में मौजूद नहीं है। टेम्पलेट पर भेजने से पहले आपको इसे PHP में विभाजित करना होगा। या आप अपना खुद का विभाजन समारोह smarty प्लगइन लिख सकते हैं। या टेम्पलेट में {php} टैग का उपयोग करें, लेकिन मैं उस समाधान से बचूंगा क्योंकि यह 'भावना' और चतुरता का उपयोग करने, प्रस्तुति और तर्क आदि को अलग करने के उद्देश्य से है।

    +3

    निष्कर्ष - smarty – ajreal

    +1

    का उपयोग न करें ऊपर दिए गए फ़ोरम पोस्ट को प्लगइन के संबंध में है, जो डिफ़ॉल्ट रूप से smarty के साथ नहीं आता है। और छेड़छाड़ उसने जो किया वह नहीं करता है, यह सिर्फ एक निश्चित लंबाई तक स्ट्रिंग को काटता है। – profitphp

    +1

    * कभी भी एक स्मार्ट टेम्पलेट में {php} टैग का उपयोग न करें, – Kris

    0

    जब Jimby की तरह उपयोग करते हुए:

    {$var|substr:$bar_at+1} 
    

    मैं कोष्ठकों या गोल कोष्ठक जोड़ें इसे बनाने के लिए काम।

    {$var|substr:($bar_at+1)} 
    
    5

    मामले में चतुर 3 के बारे में कुछ जानकारी अगर किसी चतुर 2 में चतुर 3 में और नहीं ही हासिल करना चाहते हैं:

    पहली बात यह है कि आप बनाने के लिए कोष्ठक जोड़ने की जरूरत है यह चलेगा। substr:$bar_at+1 काम नहीं करेगा लेकिन substr:($bar_at+1) काम करेगा।

    लेकिन वास्तव में आप सरल वाक्य विन्यास का उपयोग कर सकते हैं:

    {assign var="var" value="ABC | DEFGH"} 
    
    {$var|substr:($var|strpos:"|"+1)} 
    

    यह आपको शुरुआत में अंतरिक्ष के साथ DEFGH दे देंगे (पहले और | मेरी उदाहरण अपने प्रश्न में और में वर के अंदर रिक्त स्थान हैं) और आप चाहते हैं के रूप में अंतरिक्ष के बिना स्ट्रिंग प्राप्त करने के लिए आप इस मामले +2 बजाय +1 में उपयोग करना चाहिए:

    {$var|substr:($var|strpos:"|"+2)} 
    

    उन ऊपर चतुर 3.1.19 में परीक्षण किया गया।

    आपको यह भी पता होना चाहिए कि पिछले संस्करणों में (Smarty 3.1 से पहले) यदि आपके स्ट्रिंग यूटीएफ -8 अक्षरों में है तो आपको mb_ फ़ंक्शन का उपयोग करना चाहिए।

    Smarty 3.1 के रूप में यदि mbstring एक्सटेंशन स्थापित है तो Smarty स्वचालित रूप से उस मामले में mb_ फ़ंक्शंस का उपयोग करता है, इसलिए utf-8 वर्णों में कोई समस्या नहीं होगी।

    आप Smarty utf-8 encoding

    संबंधित मुद्दे