cushycms önizleme link cakephp yönlendirme

3 Cevap php

Ben oldukça statik sayfaların bir dizi I Gösterim / sayfalar klasörüne taşınır wich var. Sonuç olarak *. CTP dosyaları CushyCMS (kukla kanıtı düzenleme için mükemmel basit CMS) ile benim müşteri tarafından düzenlenebilir. Ancak CushyCMS açıkça dikkate CakePHP'ye yapmayız önizleme bağlantılar oluşturulur. Ben özel yönlendirme ile bu küçük sorunu çözmek istiyorum, ama ayrıntılar etrafında başımı alamıyorum ..

Nasıl dinamik url http://localhost:8888/cake125/app/views/pages/test.ctp http://localhost:8888/cake125/pages/test bağlanabilir?

Ben benim routes.php aşağıdaki eklendi:

Router::connect('/pages/test.ctp', array(
  'controller' => 'pages',
  'action' => 'display', 'test'));

http://localhost:8888/cake125/pages/test.ctp http://localhost:8888/cake125/pages/test: Bu bağlantı için ok çalışır. Her nasılsa şu snibbet hile yapmaz:

Router::connect('/app/views/pages/test.ctp', array(
  'controller' => 'pages',
  'action' => 'display', 'test'));

İdeal bir tek Router :: doğru yere tüm / app / views / sayfalar / *. CTP isteklerini bağlayan bağlantı deyimi var istiyorum.

Sonunda ben de doğru sitenin eski sürümü için google arama sonuçlarını ele almak istiyorum. Şöyle:

Router::connect('/test.html', array(
   'controller' => 'pages',
   'action' => 'display', 'test'));

Bu ok çalışıyor ama ben daha ziyade / sayfalar / anypage bağlanmak anypage.html olurdu. Herkes bu konuda yardımcı olabilir?

Şimdiden teşekkürler!

3 Cevap

Yerine o var nasıl daha, eylem: kontrolörü /: Birincisi, bir alt (/ cake125) içinde kek olan sayesinde, sana / cake125 / bağlamak gerekebilir düşünüyorum. % 100 değil, olsa; Kek kullanan davayı işlemek için yeterince güçlü olabilir. Eğer garip hatalar varsa, bunu kontrol ederdim.

On with my answer: I think you are somewhat misunderstanding how the Router class works. You connect URLs, not relative filesystem paths, using Router::connect. By default (which you may have erased, but it's pretty simple to fix), Cake will route requests to /pages/* to the PagesController::display() function, passing it one argument (the action listed in the http request).

Yani, app / views / sayfalar / one.ctp elemanına sayfaları kontrolör harita / sayfalar / tane, sadece çizgi yolları config olan aşağıdaki (bu kurulum varsayılan, yani Cake normalde vardır) olduğundan emin olun (ve yapmak ) üstünde çizgiler, bu desen eşleşmiyor emin olun:

Router::connect( '/pages/:action', array( 'controller' => 'pages', 'action' => 'display', :action);

Bu PagesController :: display ($ eylem) sonra ne konum (Bence) isteği, sırasında çağrılan sağlamalıdır.

CMS size doğru yeniden rota istiyorum önizleme bağlantılar oluşturur, ben yeni bir rota ekleyerek öneririm. Örneğin, CMS http://somesite.com/cms/preview/newly_edited_file, böyle rota bunu yapabilirsiniz gibi bağlantılar oluşturur eğer:

Router::connect( '/cms/preview/:action', array( 'controller' => 'pages', 'action' => 'display', :action );

İkinci soru için: rotalarda varsayılan bir kural vardır (bu son kural yapmak ve bu maç var *). Daha sonra istendiği gibi tüm denetleyicisi / eylem çifti isteklerini bulunamadı rota yapılandırılacaktır. Bu deneyin:

Router::connect( '/:action', array( 'controller' => 'pages', 'action' => 'display', :action );

Major caveat bu mevcut güzergahlara kıracak. Eğer gibi bazı akıllı çözümler bulabilirsiniz etrafında google ise, ... vb ..).: Elle mevcut denetleyicileri her biri için bir giriş (Router :: connect ('eylem / kullanıcılar /' eklemeniz gerekir Sizin için zamanında oluşturulan bu listeyi sahip. Fakat ekledik kez, "normal" yönlendirme ele gerekir ki catch-all (ve catch-all yönlendirme dosyanın sonunda olduğundan emin olun).

Eğer / test.html gibi URL'leri ayrıştırmak istiyorsanız Kek kayıt böylece Ayrıca, sadece Router :: parseExtensions çağrısı (...) ekleyin. Html bunu ayrıştırmak için bir uzantısı olarak. Daha fazla bilgi için bu fonksiyonu üzerinde manuel kontrol edin.

Diğerleri CakePHP Router nasıl çalıştığını belirttiği gibi, o onu bırakacağım.

Sorunuza (eski bağlantılar taşıma) ikinci bölümü için, ben senin Routes listenin sonuna bu ekleyerek öneririm:

Router::connect( '/:page', 
    array (
        'controller' => 'pages', 
        'action' => 'display',
    ), 
    array (
        'pass' => array ('page'),    // to pass the page as first arg to action
        'page' => '.+\.html$',       // to verify that it ends with .html
    )
);

Sen ne yazık ki olsa .html kendinizi ayrıştırmak olurdu

Nasıl dinamik url http://localhost:8888/cake125/app/views/pages/test.ctp http://localhost:8888/cake125/pages/test bağlanabilir?

Peki, bir şey değil mi, değildir. :-)

Olduğunu ne kastettiğimi, başka bir URL'ye bir URL takmayın. Gerçekten ne olduğunu, belirli URL'leri belirli Controller functions (veya Actions kısa) hangi sırayla olabilir (ya da olmayabilir) render belli {[tetikleyebilir yapmak (3)]}. Varsayılan olarak bu adlandırma kuralları aracılığıyla tüm yalındır bulunuyor. URL /foo/bar Denetleyicisi Foo 's Eylem bar tetikler ve Görünüm işler /views/foo/bar.ctp.

PagesController zaten özel bir durumdur. URL /pages/foo Kontrol tetikler Pages 's Eylem display, Görünüm {[(4 işler ki, bu parametre foo geçer )]}. Action tetiklenir edildiği fark.

Bir sürü adımlar inbetween var olduğundan, bir belirli bir URL sabit disk üzerinde belirli bir dosyaya karşılık verilen değil. URL /foo/bar Denetleyicisi Görüntüle vermektedir Baz 'Eylem doh tetikleyebilir /views/narf/glob.ctp.

Bu http://localhost:8888/cake125/app/views/pages/test.ctp /views/pages/test.ctp yerde arkada bir belirsizlik ve acı arasındaki dosyayı işlemek için çeviri yapar.


Edit:

Sizin durumunuzda özel bir sorun taban URL http://localhost:8888/cake125/app/ olduğunu söyledi olması. Sen http://localhost:8888/cake125/, http://localhost:8888/cake125/app/ veya http://localhost:8888/cake125/app/webroot Bir Kek app çağırabilirsiniz. Eğer istek "iletilir" olacak kısa URL'lerden birini kullanıyorsanız, tüm üç URL'ler .htaccess kurallar ile (yeniden yazılabilir), aynı dosya cake125/app/webroot/index.php tarafından ele alınacaktır.

Yani bağlanmaya çalıştığınız Rota, Kek gördüğü Rota, aslında /views/pages/test.ctp.

Aslında, benim hatam, bu sorun olmayabilir, ancak sizin .htaccess dosyaları ve sunucu yapılandırmasına bağlıdır.


Her yeni oluşturulan sayfa kendi kural gerekir çünkü, ama bir CMS çok mantıklı görünmüyor. Yani bunu yapmak ve oldukça düzgün Kek HtmlHelper veya Router::url() kullanarak URL'leri oluşturmak için rahat kesmek için çalışırken karşı tavsiye ederim. Aksi taktirde, bazı Eyleme bir catch-all üstünlüğü ile tüm URL'leri bağlanmak orada URL ayrıştırma ve "elle" render doğru Görünüm.

Alternatif olarak, .htaccess dosyalarını kullanmak ve Kek bu konuda endişelenmenize gerek yok bu yüzden, aslında, normal Kek URL içine URL yeniden yazma kurallarını yeniden. Ama yukarıda söylediğim gibi, bu çok kırılgan olabilir.