2010-04-13 7 views
6

Ho iniziato a utilizzare il progetto django CMS. È fantastico, costruito con un design modulare tenuto presente ... ma ciò che in realtà il nostro cliente desidera è più semplice:Plug-in di contenuto predefinito in django-cms

Qui, nel dMS di django ogni pagina può contenere molti "plug-in" di contenuto, che si tratti di testo, immagine o altro . Ma il cliente vuole che un plug-in di testo sia attivo, selezionato e creato automaticamente per ogni nuova pagina e che lavori su quel campo di testo. È qualcosa che è semplicemente più semplice da usare.

Chiunque ha già fatto qualcosa del genere con questo sistema CMS? Oppure, qualsiasi altra semplice soluzione CMS per django che potresti raccomandare?

+0

questa non è una risposta per quanto potrebbe essere hlpful: http://www.django-cms.org/en/documentation/2.0/configuration/#cms-placeholder- conf – dzida

risposta

0

Il più veloce, ma probabilmente non è il modo più elegante è:

  • scrivere uno script che imita il comportamento degli utenti nella scelta e l'aggiunta di plugin di testo da un menu a discesa;
  • ignora PageAdmin per includere il nostro script.

Va in questo modo:

# anywhere in your project, for example, site/admin.py 
from cms.models import Page 
from cms.admin.pageadmin import PageAdmin 

class ModPageAdmin(PageAdmin): 
    class Media: 
     js = ('js/cms.page.js',) 

admin.site.unregister(Page) 
admin.site.register(Page, ModPageAdmin) 

# in MEDIA_URL/js/cms.page.js 
$(document).ready(function(){ 
    ph = $("div.form-row.main") // replace "main" with your placeholder name, lower-case 
    $("select", ph).val('TextPlugin') 
    window.setTimeout(function(){ $("span.add-plugin", ph).click() }, 500) 
}) 
1

Avete ancora bisogno del modulo CMS?

il più fondamentale dei CMS è quasi banale utilizzando out-of-the-box django:

class ContentPage(models.Model): 
    title = models.CharField(max_length=100) 
    content = models.TextField() 
    slug = models.SlugField() 

def view_page(request, slug='home'): 
    return render_to_response('content.html', 
     { 'page': ContentPage.objects.get(slug=slug) }, 
     context_instance=RequestContext(request) 
    ) 

Basta utilizzare l'amministratore Django per iniziare. Ma se vuoi di più, e non dare loro l'admin, è piuttosto facile battere un modulo/azione per modificare questi campi.

Se è necessaria la modifica di wysiwyg, aggiungere tinymce al modello di modulo. Qualcosa di simile:

<script type="text/javascript" src="{{MEDIA_URL}}tiny_mce/tiny_mce.js"></script> 
<script type="text/javascript"> 
tinyMCE.init({... 

o (come detto da 'sayplastic') se si sta ancora modificando pagine tramite attraverso l'amministratore è possibile allegare Tiny che anche

class Media: 
    js = (
     settings.MEDIA_URL + "jquery/jquery.js", 
     settings.MEDIA_URL + "tiny_mce/tiny_mce.js", 
     settings.MEDIA_URL + "js/admin.js" 
    ) 
1

loro è anche FeinCMS che fornisce simili editor di alberi delle pagine e blocco più semplice per impostazione predefinita. È più personalizzabile

Se non è necessario l'editor dell'albero, Django ha incorporato flatpages che sono molto semplici.

2

C'è un modo semplice per ottenere la stessa funzionalità:

fornire un numero di "pagine prototipo", una per ogni combinazione di modello di pagina e plugin istanziati si desidera essere a disposizione del cliente.

Avere il cliente creare nuove pagine copiando le pagine del modello (può essere fatto tramite l'icona di copia nelle pagine admin) piuttosto che creare una nuova pagina da zero. In questo modo i plugin richiesti saranno già lì, anche con un contenuto predefinito, se lo desideri.

Problemi correlati