2011-08-12 18 views
58

में लोड छवियां मेरे पास कोरबंडल है जिसमें मुख्य सीएसएस फ़ाइलें और छवियां हैं। अब मुझे एक समस्या है जब मैं सीएसएस से एक छवि लोड करता हूं; छवि नहीं दिखाया गया है।सिम्फनी 2 - एसेटिक - सीएसएस

background-image:url(../images/file.png) 

(एक पूर्ण पथ यह काम करता है के साथ) मैं आदेश का उपयोग संपत्ति स्थापित: assets:install web और मैं web/bundles/cmtcore/(css|images) के तहत छवि और सीएसएस फ़ाइलों को देख सकते हैं।

यहाँ कोर बंडल के अंदर फ़ाइल संरचना है:

/CoreBundle 
    /Resources 
     /public 
      /css 
       /main.css 
      /images 
       /file.png 

और यहाँ कैसे मैं टेम्पलेट में सीएसएस फ़ाइल लोड है:

{% stylesheets '@CmtCoreBundle/Resources/public/css/*' %} 
     <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" /> 
{% endstylesheets %} 

अग्रिम में आपकी मदद के लिए धन्यवाद।

+0

मुझे एक ही समस्या है। छवियों फ़ोल्डर द्वारा इसे सीएसएस में हल करने का प्रयास कर रहा है, लेकिन यह – user257980

उत्तर

53

Assetic बंडल

से cssrewrite फिल्टर का उपयोग config.yml में:

assetic: 
    debug:   %kernel.debug% 
    use_controller: false 
    filters: 
     cssrewrite: ~ 

और फिर इस तरह से अपनी शैली फोन:

{% stylesheets 'bundles/cmtcore/css/*' filter='cssrewrite' %} 
     <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" /> 
{% endstylesheets %} 

ओह और उपयोग करने के लिए मत भूलना php app/console assetic:dump

+13

इस समाधान के साथ मेरा मुद्दा यह है कि सिम्फनी/संसाधन/सार्वजनिक/सीएसएस/* पर छवियों को खोजने की कोशिश करता है जब इसे/बंडल/mybundle/images/... किसी भी विचार पर देखना चाहिए? – Clint

+1

cssrewrite का उपयोग सीएसएस में छवियों के पथों को फिर से लिखने के लिए किया जाता है। यह "छवियों की तलाश नहीं करता" है, यह भी नहीं जानता कि कोई छवि क्या है। – Inoryy

+10

ठीक है, अच्छी तरह से cssrewrite मेरी छवियों/संसाधन/सार्वजनिक/सीएसएस/* पर मेरे पथों को फिर से लिख रहा है जब इसे इसे/bundles/mybundle/images/को फिर से लिखना चाहिए/क्या आप इसे cssrewrite में बदलने के तरीके के बारे में जानते हैं? – Clint

-1

मैं सीएसएस फ़ाइल अलग ढंग से लोड करके इस "हल":

<link rel="stylesheet" href="{{ asset('bundles/cmtcore/css/main.css') }}" type="text/css" media="all" /> 

इस तरह यह एक्मे/DemoBundle में किया जाता है।

मैं इस प्रश्न को अनसुलझा छोड़ दूंगा क्योंकि यह मूर्खतापूर्ण लगता है।

+6

काम नहीं करता है यह विधि काम करती है, लेकिन यह स्टाइलशीट लोड करने के लिए एसेटिक बंडल का उपयोग नहीं करती है, जिसका अर्थ है कि आप yui_css जैसे अच्छे फ़िल्टर नहीं जोड़ सकते हैं। – Clint

13

मैंने अनुसरण करके समस्या हल की इस साइट पर निर्देशों को दर्ज करना: http://www.craftitonline.com/2011/06/symfony2-beautify-with-assetic-and-a-template-part-ii/

वास्तविक समस्या यह है कि आप अपने बंडल संसाधनों को पूर्ण संदर्भित करते हैं, लेकिन उन्हें संदर्भित करना चाहिए।

{% stylesheets filter='cssrewrite' output='css/*.css' 
    'bundles/blistercarerisikobewertung/css/*' %} 
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" /> 
{% endstylesheets %} 

स्पष्ट अपने कैश और यान के जवाब के बारे में फिर से

+1

क्या आपको इस विधि के साथ हर बदलाव (यहां तक ​​कि देव पर्यावरण में) के बाद संपत्ति इंस्टॉल नहीं करना है? मैं इसे आज़माउंगा। – LBridge

+0

@tobias, हाँ, मैंने अभी कोशिश की है और आपको वास्तव में प्रत्येक परिवर्तन के बाद संपत्तियों को स्थापित करने की आवश्यकता है। Eeek। – Clint

+0

यह मेरे लिए काम किया। मैं वेब/बंडलों में अपनी संपत्ति विकसित करूंगा ... और बाद में जब बंडल वितरित किया जाना चाहिए तो उन्हें – ivoba

6

अपनी संपत्ति स्थापित करते हैं, वास्तव में आप अगर आप --symlink विकल्प का उपयोग हर बदलाव के बाद संपत्ति को पुन: स्थापित करने के लिए नहीं है।

हालांकि, ध्यान दें कि विक्रेताओं, स्क्रिप्ट स्थापित सिमलिंक के ऊपर लिख देगा ताकि आप bundles/* फ़ोल्डरों विक्रेताओं स्क्रिप्ट चलाने के बाद फिर से --symlink विकल्प के साथ संपत्ति हटा सकते हैं और स्थापित करने के लिए की आवश्यकता होगी चल रहा है।

+0

या composer.json में इसके बजाय - सिमलिंक का उपयोग करने के लिए एक विकल्प जोड़ें (यदि आप 2.1+ का उपयोग कर रहे हैं) – ChocoDeveloper

17

वहाँ ccsrewrite साथ कुछ मुद्दों था:

जब AsseticBundle में @MyBundle सिंटैक्स का उपयोग संपत्ति को संदर्भित करने के CssRewrite फिल्टर काम नहीं करता। यह एक ज्ञात सीमा है।

यहाँ cssrewrite के लिए php संस्करण है:

<?php 
    foreach ($view['assetic']->stylesheets(array(
     'bundles/test/css/foundation/foundation.css', 
     'bundles/test/css/foundation/app.css', 
     'bundles/test/css/themes/adapzonManager.css'), array('cssrewrite')) as $url): 
?> 
    <link rel="stylesheet" href="<?php echo $view->escape($url) ?>" /> 
<?php endforeach; ?> 
+7

क्यों टोग का उपयोग नहीं करते? – ChocoDeveloper

0

मैं एक ऐसी ही समस्या है, और मैं चारों ओर कम से कम एक दिन के लिए देखा है, और मैं इस के लिए एक अच्छा व्यावहारिक समाधान है यकीन नहीं मुसीबत। मैं जावास्क्रिप्ट और सीएसएस को संभालने के लिए एसेटिक का उपयोग करने की सलाह देता हूं, और फिर अपनी छवियों को अपनी वेबसाइट के डॉक्रूट में डाल रहा हूं। उदाहरण के लिए, यदि आपके पास एक css फ़ाइल है जो संदर्भ ../images/file.png है, तो बस अपने दस्तावेज़ के नीचे फ़ोल्डर बनाएं और छवियां बनाएं और वहां फ़ाइल.png डाल दें। यह निश्चित रूप से सबसे अच्छा सैद्धांतिक समाधान नहीं है, लेकिन यह केवल एकमात्र ऐसा है जिसे मैं वास्तव में काम करता हूं।

+0

उपयोगकर्ता257980 के उत्तर और क्लिंट टिप्पणी पढ़ें। इसे सही करने का एक तरीका है। – ChocoDeveloper

+0

मेरी पोस्ट के समय, उन तरीकों से काम नहीं हुआ। – adavea

6

मैंने इस मुद्दे को हल करने के लिए एक अतिरिक्त फ़िल्टर के साथ एक छोटा बंडल विकसित किया है। आप इसे github पर पा सकते हैं: https://github.com/fkrauthan/FkrCssURLRewriteBundle.git

यदि आपके पास अपनी सीएसएस फ़ाइल में रिलेटिव पथ हैं तो इस बंडल के साथ @ कॉन्टैक्टिक कार्यों के लिए नोटेशन। बंडलों/datacodebudget: (| | img js सीएसएस) और assetic उत्पादन पैरामीटर के लिए लिखने के लिए सेट कर दिया जाता

मेरे परिसंपत्तियों में src/Datacode/BudgetBundle/संसाधन/सार्वजनिक/जमा हो जाती है:

+0

वास्तव में समझने के बिना कि आपका कोड क्या कहता है, यह आश्चर्यजनक काम करता है। बहुत बहुत धन्यवाद =) – azzy81

1

मैं इस का उपयोग करते हुए इनको हल /css/styles.css (वेब ​​निर्देशिका में)

मेरे सीएसएस में मैं रिश्तेदार पथ का उपयोग करता हूं ../ संदर्भ छवियों का उपयोग करता हूं।

मेरे सीएसएस के रूप में भरी हुई है इस प्रकार है::

{% stylesheets 
    '@DatacodeBudgetBundle/Resources/public/css/bootstrap.css' 
    '@DatacodeBudgetBundle/Resources/public/css/bootstrap-responsive.css' 
    '@DatacodeBudgetBundle/Resources/public/css/styles.css' 
    '@DatacodeBudgetBundle/Resources/public/css/chosen.css' output="bundles/datacodebudget/css/styles.css" 
%} 
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" /> 
{% endstylesheets %} 

मेरी config.yml फ़ाइल में मेरे पास है:

assetic: 
    use_controller: true 

कौन सा (

यहाँ .htaccess नियम है htaccess rewrite के बिना) छवियों को लोड नहीं होने का कारण बनता है क्योंकि छवि के सापेक्ष पथ app_dev.php/bundles/datacodebudget/i पर है मिलीग्राम/someimage.jpg। Cssrewrite फ़िल्टर का उपयोग करना या तो काम नहीं करता है क्योंकि फिर यह ../img को ../../../../Resources/public/img/ पर संसाधन/सार्वजनिक/img को हल करता है।

htaccess विधि का उपयोग करके छवियों को ठीक से लोड किया जाता है और मुझे केवल संपत्ति चलाने की आवश्यकता होती है: डंप/संपत्ति: जब मैं नई छवियां जोड़ता हूं या उत्पादन में परिवर्तन को धक्का देना चाहता हूं।

1

मैंने 'symfony_root/web /' फ़ोल्डर में छवियों के साथ स्थायी रूप से 'छवियों' फ़ोल्डर को बनाकर इस समस्या को हल किया। परिणाम: 'symfony_root/web/images /' - और यह बहुत अच्छा काम बन जाता है!

+0

खराब सलाह अगर आप दूसरों के साथ अपने बंडलों को साझा करने की योजना बना रहे हैं। संसाधनों को अपने बंडलों में रखना बेहतर है। – k0pernikus