Come automatizzare un sistema di attività in un software CMS

3

Attualmente sto sviluppando la v2.0 dei miei cms personali. Tuttavia, sono bloccato. Sento strongmente che la mia vecchia soluzione per "compiti" non è molto dinamica e deve essere rivisitata. Attualmente sto osservando l'intero concetto di come aggiungere dinamicamente compiti ed eseguirli.

Che cosa intendo per sistema di attività
Come sempre nel software cms, ci sono molti contenuti, come immagini, file dinamici, voci di database, ecc. Ho creato il mio proprio sistema di task alias. The Parser (suona male, vero?) È composto da due file, una parser-classes e altri trigger con $parser = new ParserClasses(); (spero tu capisca cosa intendo.) Alcune delle caratteristiche del parser:

  • Prima spegni il sito (dopo che il parser è terminato, riaccendilo)
  • Controlla i file attivi (i file che non hanno la voce principale di mysql, saranno cancellati)
  • Cancella la vecchia cache
  • Genera una nuova cache statica
  • Gestisce le lingue e la cache correlata alla traduzione
  • e altre attività correlate alla gestione e alla manutenzione di cms

Perché voglio renderlo più automatico
Fondamentalmente tutti i plugin e alcuni temi (componenti aggiuntivi in generale) utilizzano questo sistema di attività. Ma il problema è che non è molto dinamico, perché tutte le funzioni si trovano in una grande classe. Ciò significa che il componente aggiuntivo non può essere installato senza aprire l'editor php.

Come stavo progettando di farlo
Per prima cosa creerei il mio linguaggio delle attività , con funzioni preimpostate per gestire file, cache, ecc. (Esempio molto ampio: GenerateFreshCache('pages') ). Ora, la memorizzazione è il problema .. Le mie idee sono:

  1. Per creare una tabella delle attività nel database mysql. Quindi aggiungi le attività lì, con la mia lingua delle attività . Successivamente while() li dal database e eval() . (Questo è un buon modo, perché posso aggiungere orari programmati e funzioni simili, per lavori CRON o anche classificare le attività.)
  2. Aggiungi i file .php in una cartella, dove vengono caricati. Probabilmente useranno lo stesso linguaggio delle attività , ma non è necessario essere eval() 'ed. (Ho paura che ciò rallenterebbe il parser, perché vengono inclusi così tanti file.)

Tuttavia, non sono sicuro di queste idee e spero che qualcuno abbia già trovato questa funzionalità e possa darmi dei suggerimenti. Tutte le idee e concetti pazzi sono benvenuti, grazie in anticipo.

Conclusione
grazie a tutti quelli che hanno risposto. Ho scelto la risposta, che mi ha aiutato di più e non "ohh, troppo lavoro, uso framework". Il mio core dei sistemi operativi è completo e funzionante. Ci sono voluti 2-3 giorni e attualmente ~ 600 linee di codice e due classi (core esterno e interno.) Alla fine ho finito con due tabelle mysql, una con compiti (task db) e un'altra con combo (più attività combinate insieme per una più facile esecuzione .) Inoltre, ha aggiunto alcune funzionalità in modo che sarebbe sicuro di correre via ajax (non posso davvero parlarne, top secret ^^). Potrebbero esserci troppi cicli, gestendo l'analisi delle attività, ma questo rende l'aggiunta di nuovi compiti molto semplice .. Basta aggiungerla al DB delle attività e aggiungere l'attività a cron-list-automatic-run-list o eseguirla direttamente via il pannello di amministrazione.

    
posta Kalle H. Väravas 19.08.2011 - 17:35
fonte

5 risposte

3

Mi piace l'idea di memorizzare attività nel db. Non mi piace l'idea di creare un "linguaggio operativo". Perché non memorizzare tutto nel database? La tabella delle attività includerebbe un codice di azione e il contenuto associato. Quando si esegue il polling del db per le attività, si avrà accesso a tutto il contenuto necessario per generare le pagine. Esegui l'azione in base al codice e puoi tenere traccia dei timestamp di quando sono state eseguite le azioni. Ciò annulla il n. 2 dell'aggiunta di file in una cartella.

Le pagine generate possono essere memorizzate nel db. Diamine, potresti persino tradurli al volo (se non sono già in HTML). Dopo aver eseguito correttamente un'operazione, è possibile contrassegnarlo come completo. Questo tipo di sistema ti dà la possibilità di riattivare le attività meno recenti e non ti obbliga a generare file e memorizzarli nel file system (che potrebbe essere un problema in un ambiente ospitato).

Questo tipo di sistema è utilizzato da Wordpress e sembra funzionare perfettamente.

    
risposta data 22.08.2011 - 16:10
fonte
4

Congratulazioni, stai lavorando per reinventare la coda dei messaggi. Va bene, lo fanno tutti almeno una volta. So di averlo fatto una mezza dozzina di volte. In ogni caso, piuttosto che inventare un linguaggio delle attività e assumerne la complessità, ciò che dovresti cercare è un prodotto di accodamento dei messaggi per PHP. Vorrei fare una raccomandazione, ma non ho fatto nulla di più della monkeypatch in PHP nella memoria recente, quindi non sono sicuro su quale piattaforma iniziare.

Se decidi di doverlo fare da solo, eviterei di scrivere una lingua di attività: basta passare un tipo di attività più i dati. Istanziare le attività tramite una fabbrica di qualche tipo, passare i dati. Non dimenticare un sacco di registrazioni e così puoi avere un'idea del motivo per cui il tuo compito sta silenziosamente fallendo.

    
risposta data 22.08.2011 - 16:34
fonte
1

Perché non rimuovere le attività? Crea funzioni che faranno cose che fai nelle attività e chiamale quando modifichi un'entità.

Quindi diciamo che stai usando la libreria di traduzioni di venire per tradurre articoli di notizie.
Perché non chiamare generateTranslations quando qualcuno aggiorna o crea un'entità?

EDIT1: (rispondi al commento) Sì, ma da quello che posso vedere, stai correggendo le voci non corrispondenti nel database nell'attività? Penso che sia completamente sbagliato, dovresti scrivere la tua app in modo che tali cose non possano accadere. L'unica cosa che FORSE deve essere scritta come compito è la generazione della cache, e questo è solo se sei limitato e vincolato da qualche altro sistema. (ad esempio se il tuo server può generare tutta la cache in un colpo solo, ma sono abbastanza sicuro che non è il caso) Rileggo il tuo commento, e posso vedere che stai usando l'attività principalmente per sistemare le cose, dovresti davvero rifattorizzare tutto il tuo codice e correggere quei bug. Voglio dire, stai letteralmente rattoppando i dati per compensare i bug che hai introdotto.

EDIT2: ecco alcune cose che dovrebbero andare nelle attività: Invio di e-mail contenenti informazioni su alcuni articoli creati dall'ultima "uguale" email inviata.
Analisi di contenuti da altre fonti (ottenendo articoli da altri siti) SE questa fonte non può notificare nuovi dati che è necessario ottenere o inviare nuovi dati.

    
risposta data 22.08.2011 - 20:28
fonte
0

Non vedo alcun vantaggio particolare dei file su un DB. Ma perché limitarti a eval (), perché non compilare e memorizzare nella cache il codice compilato (se pensi che un colpo singolo che può accadere spesso in background sia migliore nel tuo caso)?

    
risposta data 24.08.2011 - 00:16
fonte
0

Ogni modulo può registrare i callback che si verificano quando si esegue il sistema del task. Ogni modulo avrà un file in esso che il tuo sistema di compiti includerà prima dell'esecuzione che configurerà i callback.

/module.name/task.php

\Task\System::regster('startup', function()
{
    // do something
});

\Task\System::regster('shutdown', function()
{
    // do something
});

/task.php

foreach($modules as $module)
{
    require($module . '/task.php');
}

\Task\System::run();
    
risposta data 24.08.2011 - 22:14
fonte

Leggi altre domande sui tag