Página 1 de 1

Colocando "publicar" no componente

Enviado: 03 Set 2009, 09:25
por lcjunior
Olá caros amigos,

Estou desenvolvendo um componente e nele terá um campo chamado Estado, cujo as opções serão Publicado e Despublicado.

Ou seja, eu quero fazer com que o registro q eu cadastre no componente e coloque no campo Estado como Publicado apareça na Frontend enquanto q os Despublicados não aparecam. Semelhante ao Gerenciamneto de artigos padrão do Joomla.

É ai que está o meu problema não sei como fazer isso, se alguém souber por favor me avise.

Obrigado.

Re: Colocando "publicar" no componente

Enviado: 03 Set 2009, 13:52
por wmfelipe
Esse componente tem essa opção:
http://extensions.joomla.org/extensions ... ssion/8656

veja o método unPublish no controlador ;)

qualquer dúvida é só falar..

abraço

Re: Colocando "publicar" no componente

Enviado: 10 Set 2009, 11:21
por lcjunior
Eu consegui colocar a imagem e a função unPublish, mas quando clico sobre ela no estado Unpublish ela não muda para Publish e vice - versa.

Vocês saberiam dizer qual o motivo disso???

Obrigado

Re: Colocando "publicar" no componente

Enviado: 10 Set 2009, 14:06
por wmfelipe
Bom, vou tentar explicar :)

Código: Selecionar todos

function unPublish() {

		$cid = JRequest::getInt('cid'); //pega o identificador do registro que será publicado
		$db = &JFactory::getDBO(); //pega uma instancia do banco


			require_once('models/frontenduserarticlelist.php'); // inclui a classe modelo
			$fual_model = new FUALModelFrontendUserArticleList(); // instancia um objeto modelo
			$item_content = $fual_model->getItem($cid); // retorna um objeto específico de acordo com o identificador

			// essa parte do modelo nao precisa ser feita, basta que a partir DAQUI tu tenha um objeto stdClass que possua os atributos com os nomes iguais aos nomes dos campos da tua tabela no banco
			if(is_object($item_content)) {

                                // $item_content é o objeto e no caso o state é o nome do campo da tabela que guarda 1 para publicado e 0 para despublicado
				$item_content->state = ($item_content->state == 0) ? 1 : 0; // se o estado (state) atual for 0 (despublicado), o atributo é alterado para 1 (publicado), mas se for 1 é alterado para 0....

				// nesse momento tu deve ter o teu objeto com o status alterado, e o método updateObject é o método que faz a alteração do registro no banco. O primeiro parametro é o nome da tua tabela, o segundo é o teu objeto e o terceiro é o nome do campo que tu usa como identificador do mesmo
				$db->updateObject('#__content', $item_content, 'id');
			}
		// e aqui apenas um redirecionamento
		$this->setRedirect("index.php?option=com_frontenduserarticlelist&view=frontenduserarticlelist");
	}
basicamente é isso.... :) espero que ajude...

qualquer dúvida é só falar...

abraço

Re: Colocando "publicar" no componente

Enviado: 11 Set 2009, 16:09
por lcjunior
Na função Unpublish eu mudei.

Mas ai tenho q mudar a função:

<?php echo $this->lists['state']; ?>

para

<?php echo $this->lists['published']; ?>

????????????

Re: Colocando "publicar" no componente

Enviado: 11 Set 2009, 16:19
por wmfelipe
aonde isso? :?

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 14:01
por lcjunior
Isso ai na views/default.php

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 14:07
por wmfelipe
O $this->lists['state']; que tem ali próximo a linha 42 apenas exibe o select que permite filtrar os registros e não influencia na ação de publicar ou despublicar um registro...

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 14:21
por lcjunior
O meu link está assim

index.php?option=com_curso&controller=curso&task=edit&cid[]='. $row->id

porém quando eu clico sobre ele a figura não está mudando, ou seja não fica publicado

Na onde deve estar o erro??????

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 14:26
por wmfelipe
o método unPublish foi colocado dentro do controller curso né?
então a tua task não vai ser edit, (pois cairá no método edit)

tente o link assim:

index.php?option=com_curso&controller=curso&task=unPublish&cid='. $row->id

;)

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 14:34
por lcjunior
o meu código na default está assim:

<?php
if(true) {
$url = 'index.php?option=com_curso&controller=curso&task=unPublish&cid='. $row->id;
$link2 = JRoute::_($url);
echo "<a href='$link2'>";
}
$img = $this->baseurl . "/images/";
$img .= ($row->published) ? "publish_g.png" : "publish_r.png";
$alt = ($row->published) ? JText::_('Published') : JText::_('Unpublished');

echo "<img src='$img' alt='$alt' title='$alt' />";

if($this->access->canPublish) {
echo '</a>';

A função assim na controller:

function unPublish() {
$cid = JRequest::getInt('cid');
$itemid = JRequest::getInt('Itemid');
$db = &JFactory::getDBO();
$user = &JFactory::getUser();

$can_publish = $user->authorize('com_content', 'publish', 'content', 'all');

if($can_publish) {
$model = $this->getModel('cursos');
//require_once('administrator/components/com_curso/models/cursos.php');
$fual_model = new CursosModelCursos();
$item_content = $fual_model->getItem($cid);

if(is_object($item_content)) {
//change state to published or unpublished
$item_content->published = ($item_content->published == 0) ? 1 : 0;

$db->updateObject('#__curso', $item_content, 'id');
}
}

$this->setRedirect("index.php?option=com_curso");
}
}

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 14:38
por wmfelipe

Código: Selecionar todos

if(true) {
?????

Código: Selecionar todos

if($this->access->canPublish) {
echo '</a>';
e a tag <a> só vai ser fechada se o cara tiver permissão de editar artigos? :shock:

era pro php retornar um warning ao ler teu código :P

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 14:46
por lcjunior
no lugar do if(true)

eu coloquei:

if($this->access->canPublish && $row->published != -2)

Mas ai ele naum linka a imagem pq????

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 14:57
por wmfelipe
é só ler o código...

se o usuário tem permissão para publicar, ele cria a tag A, senão, não :D
entao tem que verificar se o php chega a entrar no teu if......

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 15:00
por lcjunior
Mas para mim deveria aparecer...

Porque eu sou super administrador e posso publicar...

E pq naum está aparecendo???

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 15:07
por wmfelipe
não sei e nem tenho como saber...
tu vai ter que debugar o código e testar linha por linha dessa parte para ver o que o php está entendo disso tudo...
tu sabe usar var_dump() né?

Código: Selecionar todos

echo '<pre>'; var_dump($this->access->canPublish, $row->published); die();
se o canPublish retornar true e o published for diferente de -2 o teu link tem que aparecer....

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 16:08
por lcjunior
Todos os dois apareceram NULL

Isso significa q ele naum achou nada naum eh???

O q pode ter acontecido???

Re: Colocando "publicar" no componente

Enviado: 14 Set 2009, 16:32
por wmfelipe
sobre o $row->published nulo, existe um campo published na tua tabela do banco? se sim, esse valor está sendo solicitado na consulta??? se sim, ele está sendo colocado no atributo published do objeto stdClass que é criado com as informações do banco logo após a consulta?

sobre o canPublish, veja como eu fiz ali no componente que te passei....
no arquivo view.html.php , método display, tem isso né?

Código: Selecionar todos

$user = &JFactory::getUser();
//.......
// Create a user access object for the user

		$access = new stdClass();

		$access->canEdit = $user->authorize('com_content', 'edit', 'content', 'all');

		$access->canEditOwn = $user->authorize('com_content', 'edit', 'content', 'own');

		$access->canPublish = $user->authorize('com_content', 'publish', 'content', 'all');
//.......
$this->assignRef('access', $access);
então... tu tem que preparar os objetos antes de enviar pro template... e isso se faz no view.html.php ....