1. Fazer o Download da imagem do OpenElec
http://adf.ly/1UMivZ
2. Fazer o Download do Win32 Disk Imager
http://adf.ly/1UMixb
3. Coloque o Cartão Micro SD no Computador. Entre no CMD como adiministrador e digite os seguintes comandos.
diskpart
list disk
Verifique em qual Nº de Disco seu cartão está. Digite.
select disk "Numero do Disco"
clean
create partition primary
active
Format fs=fat32 quick
Assign
exit
4. Colocando a Imagem no cartão de memoria, depois de instalado o Win32 Disk Imager execute o selelecione a imagem que você já abaixou e clique em Write aguarde terminar remova o micro sd e coloqueo no raspberry.
Obs: Recomendo pausar o AD Block para abrir os links.
1) Configurando APP Controller
cd src/cake/app/plugins/NOME_DO_SEU_PLUGIN
gedit NOME_DO_SEU_PLUGIN_app_controller.php
Adicione o seguinte codigo
<?php
class NOME_DO_SEU_PLUGINAppController extends AppController {
var $layout = 'NOME_DO_SEU_PLUGIN';
var $layoutScheme = 'NOME_DO_SEU_PLUGIN';
var $componets = array(
'Typhographer.TypeLayoutSchemePicker'
);
var $helpers = array(
'Typhographer.TypeDecorator' => array(
'name' => 'StyleFactory',
'receive_automatic_class' => true,
'receive_tools' => true,
'generate_automatic_classes' => false
),
'Typhographer.*TypeBrickLayer' => array(
'name' => 'Bl',
'receive_tools' => true
),
'JjUtils.Jodel',
'Corktile.Cork' // Utilizado Para o Contente Stream
)
function beforeRender() {
parent::beforeRender();
$this->TypeLayoutSchemePicker->pick('NOME_DO_SEU_PLUGIN');
}
function beforeFilter() {
parent::beforeFilter();
StatusBehavior::setGlobalActiveStatuses(array(
'publish_status' => array(
'active' => array(
'published'
),
'overwrite' => true,
'mergeWithCurrentActiveStatuses' = true
)
));
}
}
Lebrece que não e nescessario feichar o php.
2) Configurando APP Model
gedit NOME_DO_SEU_PLUGIN_app_model.php
Adicione o seguinte codigo
<?php
class NOME_DO_SEU_PLUGINAppModel extends AppModel {
var $actsAs = array('Containable');
}
3) Agora vamos criar o php dentro da pastas models
cd models
gedit INSTANCIA_NOME_DO_SEU_PLUGIN.php
(Ex: pro_professional.php)
Adicione o seuinte codigo
<?php
class INSTANCIA_NOME_DO_SEU_PLUGIN extends NOME_DO_SEU_PLUGINAppModel {
var $name = 'INSTANCIA_NOME_DO_SEU_PLUGIN';
var $actsAs = array(
'Dashboard.DashDashboardable',
'Temp.TempTemp',
'JjMedia.StoredFileHolder' => array('img_id','cover_id'),
'Status.Status' => array('publishing_status'),
'ContentStream.CsContentStreamHolder' => array(
'streams' => array('content_id' => 'professional_content'),
)
);
function createEmpty() {
return $this->save(
array('INSTANCIA_NOME_DO_SEU_PLUGIN' =>
array('publishing_status' => 'draft')
),
array('validate' => false)
);
}
function getDashboardInfo($id) {
$data = $this->find('first', array(
'conditions' => array($this->alias.'.id' => $id),
'contain' => array()
));
if ($data == null)
return null;
$dashdata = array(
'dashable_id' => $data['INSTANCIA_NOME_DO_SEU_PLUGIN']['id'],
'dashable_model'=> $this->name,
'type' => 'NOME_DO_SEU_SITE',
'status' => $data['INSTANCIA_NOME_DO_SEU_PLUGIN']['publishing_status'],
'created' => $data['INSTANCIA_NOME_DO_SEU_PLUGIN']['created'],
'modified' => $data['INSTANCIA_NOME_DO_SEU_PLUGIN']['modified'],
'name' => $data['INSTANCIA_NOME_DO_SEU_PLUGIN']['name'] . ' ' . $data['INSTANCIA_NOME_DO_SEU_PLUGIN']['last_name'],
'info' => 'Resumo: ' . substr($data['INSTANCIA_NOME_DO_SEU_PLUGIN']['abstract'], 0, 100),
'idiom' => null
);
return $dashdata;
}
}
4) Entre na views, elements Criar um elemento.ctp
cd views/elementes
gedit INSTANCIA_NOME_DO_SEU_PLUGIN.ctp
(Ex: pro_professional.ctp)
Adicione o Seguinte Codigo
<?php
switch ($type[0]) {
case 'buro':
switch ($type[1]) {
case 'form':
echo $this->Buro->sform(array(), array(
'model' => $fullModelName,
'callbacks' => array(
'onReject' => array(
'js' => '$("content").scrollTo(); showPopup("error");',
'contentUpdate' => 'replace'
),
'onSave' => array('js' => '$("content").scrollTo(); showPopup("notice")'),
)
)); {
echo $this->Buro->input(
null, array('type' => 'hidden', 'fieldName' => 'id')
);
echo $this->Buro->input(
null,
array(
'type' => 'text',
'fieldName' => 'name',
'label' => __d('professional', 'Nome', true),
)
);
echo $this->Buro->input(
null,
array(
'type' => 'text',
'fieldName' => 'last_name',
'label' => __d('professional', 'Sobrenome', true),
)
);
echo $this->Buro->input(
null,
array(
'type' => 'textarea',
'fieldName' => 'abstract',
'label' => __d('professional', 'Texto de Apresentação', true),
)
);
//profile img
{
$error = $this->Form->error('INSTANCIA_NOME_DO_SEU_PLUGIN.img_id');
if ($error)
echo $this->Bl->sdiv(
array('class' => 'input buro input_text required error')
);
echo $this->Buro->input(
null,
array(
'type' => 'image',
'fieldName' => 'img_id',
'label' => __d('professional', 'Foto', true),
'options' => array('version' => 'backstage_preview')
)
);
if ($error) {
echo $this->Form->error('INSTANCIA_NOME_DO_SEU_PLUGIN.img_id');
echo $this->Bl->ediv();
}
}
$contacts = $this->data['INSTANCIA_NOME_DO_SEU_PLUGIN']['contact'];
echo $this->Buro->sinput(
null,
array(
'type' => 'super_field',
'label' => 'Contato',
)
);
for ($i = 0; $i < count($contacts[0]); $i++) {
echo $this->Bl->sdiv(array('class' => 'fields'),array());
echo $this->Buro->input(
array(
'onchange' => 'AddFields(); return false',
'class' => 'title',
'value' => $contacts[0][$i],
),
array(
'type' => 'text',
'fieldName' => 'INSTANCIA_NOME_DO_SEU_PLUGIN.contact_title.' . $i,
'label' => __d('professional', 'Titulo', true),
)
);
echo $this->Buro->input(
array(
'onchange' => 'AddFields(); return false',
'class' => 'contact',
'value' => $contacts[1][$i],
),
array(
'type' => 'textarea',
'fieldName' => 'INSTANCIA_NOME_DO_SEU_PLUGIN.contact_value.' . $i,
'label' => __d('professional', 'Conteúdo', true),
)
);
echo $this->Bl->ediv();
}
echo $this->Bl->sdiv(array('class' => 'fields'),array());
echo $this->Buro->input(
array(
'onchange' => 'AddFields(); return false;',
'class' => 'title',
),
array(
'type' => 'text',
'fieldName' => 'INSTANCIA_NOME_DO_SEU_PLUGIN.contact_title.' . count($contacts[0]),
'label' => __d('professional', 'Titulo', true),
)
);
echo $this->Buro->input(
array(
'onchange' => 'AddFields(); return false;',
'class' => 'contact'
),
array(
'type' => 'textarea',
'fieldName' => 'INSTANCIA_NOME_DO_SEU_PLUGIN.contact_value.' . count($contacts[0]),
'label' => __d('professional', 'Conteúdo', true),
)
);
echo $this->Bl->ediv();
echo $this->Buro->einput();
echo $this->Html->scriptBlock('
function _(str) {
return document.getElementsByClassName(str);
}
var copy, newCopy, fields = _("fields");
window.onload = function() {
copy = fields[0].cloneNode(true);
copy.childNodes[1].childNodes[2].value = "";
copy.childNodes[3].childNodes[2].childNodes[2]. value = "";
}
function AddFields() {
var superfield = _("superfield_container")[0];
var title = _("title");
var contact = _("contact");
for (var i = 0; i < title.length; i++)
if (title[i].value == "" && contact[i].value == "") {
console.log(fields[i]);
superfield.removeChild(fields[i]);
}
if (title[--i].value != "" && contact[i].value != "") {
newCopy = copy.cloneNode(true);
i++;
newCopy.childNodes[1].childNodes[2].name = "data[INSTANCIA_NOME_DO_SEU_PLUGIN][contact_title]["+ i +"]";
newCopy.childNodes[1].childNodes[2].value = "";
newCopy.childNodes[3].childNodes[2].childNodes[2].name = "data[INSTANCIA_NOME_DO_SEU_PLUGIN][contact_value]["+ i +"]";
newCopy.childNodes[3].childNodes[2].childNodes[2].value = "";
superfield.appendChild(newCopy);
}
}
');
echo $this->Buro->submitBox(array(), array());
} echo $this->Buro->eform();
break;
}
break;
}
1) Após tem criado o plugin a ser utilizado entre no bootstrap.php
cd src/cake/app/config/
gedit bootstrap.php
2) Procure por
Configure::write('jj.modules', array(
Logo Abaixo de um Entre e adicione o codigo seguinte
'NOME_DO_SEU_PLUGIN' => array(
'model' => 'NOME_DO_SEU_PLUGIN.NOME_IDENTICO_A_TABELA_DO_DB', //(Ex: ProProfessional) (Ex Tabela: pro_professionals)
'viewUrl' => false,
'humanName' => __d('NOME_DO_SEU_PLUGIN','NOME_DE_EXIBIÇÃO',true),
'plugged' => array('dashboard','backstage'),
'permissions' => array(
'delete' => array('backstage_delete_item'),
'edit_draft' => array('backstage_edit_draft'),
'edit_published' => array('backstage_edit_published'),
'create' => array('backstage_edit_draft'),
'edit_publishing_status' => array('backstage_edit_publishing_status'),
'view' => array('backstage_view_item')
)
),
Obs: Note que todas as tabelas do banco de dados estão no plural porem quando vamos identificalas no model utilizamos no singular.
3) Agora iremos adicionar esse plugin em nossas Page_sections
cd src/cake/app/plugins/page_sections/config
gedit sections.php
Procure por
$sections = array(
'public_page' => array(
Logo Abaixo procure por
'subSections' => array(
Adicione o seguinte codigo
'NOME_DO_SEU_PLUGIN' => array(
'linkCaption' => __d('NOME_DO_SEU_PLUGIN','NOME_DE_EXIBIÇÃO', true),
'url' => array(
'plugin' => 'NOME_DO_SEU_PLUGIN',
'controller' => 'NOME_IDENTICO_A_TABELA_DO_DB', //(Ex: pro_profissional)
'action' => 'index'
)
),
1) Criando um plugin
cd src/cake/app/plugins/
mkdir NOME_DO_SEU_PLUGIN (Ex: pie_video)
2) Criando os Controllers
cd NOME_DO_SEU_PLUGIN (Ex: pie_video)
mkdir controllers
3) Criando os Models
mkdir Models
4) Criando as Views
mkdir views
5) Entrando na pasta views crie uma pasta elements
cd views
mkdir elements
6) Criando meu APP Controlher
Voutando a raiz do seu plugin
gedit NOME_DO_SEU_PLUGIN_app_controller.php
Lembrando que todas as letras são minusculas e os espaços são preenchidos por " _ " underline
7) Criando meu APP Model
Na propria raiz do seu plugin
gedit NOME_DO_SEU_PLUGIN_app_model.php
1)Para começar, precisa preparar o databases, criando as tabelas necessárias para a estruturado Jodel Jodel.
Em docs/tools tem uma porção de scripts para rodar. Para começar, poderÃamos rodar osseguintes:
/content_stream/content_stream.sql ou /content_stream/core.sql
/content_stream/pies.sql
/cork_tiles/database/text_cork.sql
/cork_tiles/database/cork_tile_core.sql
/dashboard/database/script.sql
/jj_media/table.sql
/jj_users/database/users.sql
2)Depois, configurar o arquivo database.php do cake, indicando o banco de dados a ser usado.
cd app/config
cp database.php.default database.php
3) Configurar a Segurança de seu projeto
sudo gedit app/config/core.php
Procure Security.salt
Altere o conteudo que esta dentro de Aspas por qualquer outro nome.
4) Criar pelo menos o usuário 'Superusuario' para poder entrar na parte administrativa.
Para isso, rodar o script: docs/tools/jj_users/scripts/creating_new_users.sh na pasta da consola do
cake: cake/cake/console
5) Configuração
Criar as pastas que tenham permissão de escritura:
PROJETO/src/cake/app/tmp/cache/persistent/
PROJETO/src/cake/app/tmp/cache/models/
Comando Utulizado: chmod og+w NOME_DA_PASTA -R
Criar também as pastas (ou dar permissões para wwwdata) para gerenciar o upload dos arquivos:
PROJETO/src/cake/app/webroot/img/derivatives
PROJETO/src/cake/app/webroot/media/filter
PROJETO/src/cake/app/webroot/media/transfer
Comando Ustilizado: chown www-data:www-data NOME_DA_PASTA -R
1) Instalando Git
sudo apt-get install -y git
1) Clonando JodelJodel
cd Sites/
git clone https://github.com/prefacedesign/jodeljodel.git
Follow Us
Were this world an endless plain, and by sailing eastward we could for ever reach new distances