Colocando "publicar" no componente

Forum destinado aos programadores que pretendem utilizar o framework do Joomla! 1.5 para fazer suas próprias extensões
lcjunior
Novato
Mensagens: 12
Registrado em: 03 Set 2009, 09:13

Colocando "publicar" no componente

Mensagem 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.
Avatar do usuário
wmfelipe
Joomleiro
Mensagens: 407
Registrado em: 02 Fev 2009, 13:40
Contato:

Re: Colocando "publicar" no componente

Mensagem 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
lcjunior
Novato
Mensagens: 12
Registrado em: 03 Set 2009, 09:13

Re: Colocando "publicar" no componente

Mensagem 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
Avatar do usuário
wmfelipe
Joomleiro
Mensagens: 407
Registrado em: 02 Fev 2009, 13:40
Contato:

Re: Colocando "publicar" no componente

Mensagem 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
lcjunior
Novato
Mensagens: 12
Registrado em: 03 Set 2009, 09:13

Re: Colocando "publicar" no componente

Mensagem 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']; ?>

????????????
Avatar do usuário
wmfelipe
Joomleiro
Mensagens: 407
Registrado em: 02 Fev 2009, 13:40
Contato:

Re: Colocando "publicar" no componente

Mensagem por wmfelipe »

aonde isso? :?
lcjunior
Novato
Mensagens: 12
Registrado em: 03 Set 2009, 09:13

Re: Colocando "publicar" no componente

Mensagem por lcjunior »

Isso ai na views/default.php
Avatar do usuário
wmfelipe
Joomleiro
Mensagens: 407
Registrado em: 02 Fev 2009, 13:40
Contato:

Re: Colocando "publicar" no componente

Mensagem 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...
lcjunior
Novato
Mensagens: 12
Registrado em: 03 Set 2009, 09:13

Re: Colocando "publicar" no componente

Mensagem 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??????
Avatar do usuário
wmfelipe
Joomleiro
Mensagens: 407
Registrado em: 02 Fev 2009, 13:40
Contato:

Re: Colocando "publicar" no componente

Mensagem 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

;)
lcjunior
Novato
Mensagens: 12
Registrado em: 03 Set 2009, 09:13

Re: Colocando "publicar" no componente

Mensagem 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");
}
}
Avatar do usuário
wmfelipe
Joomleiro
Mensagens: 407
Registrado em: 02 Fev 2009, 13:40
Contato:

Re: Colocando "publicar" no componente

Mensagem 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
lcjunior
Novato
Mensagens: 12
Registrado em: 03 Set 2009, 09:13

Re: Colocando "publicar" no componente

Mensagem por lcjunior »

no lugar do if(true)

eu coloquei:

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

Mas ai ele naum linka a imagem pq????
Avatar do usuário
wmfelipe
Joomleiro
Mensagens: 407
Registrado em: 02 Fev 2009, 13:40
Contato:

Re: Colocando "publicar" no componente

Mensagem 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......
lcjunior
Novato
Mensagens: 12
Registrado em: 03 Set 2009, 09:13

Re: Colocando "publicar" no componente

Mensagem por lcjunior »

Mas para mim deveria aparecer...

Porque eu sou super administrador e posso publicar...

E pq naum está aparecendo???
Avatar do usuário
wmfelipe
Joomleiro
Mensagens: 407
Registrado em: 02 Fev 2009, 13:40
Contato:

Re: Colocando "publicar" no componente

Mensagem 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....
lcjunior
Novato
Mensagens: 12
Registrado em: 03 Set 2009, 09:13

Re: Colocando "publicar" no componente

Mensagem por lcjunior »

Todos os dois apareceram NULL

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

O q pode ter acontecido???
Avatar do usuário
wmfelipe
Joomleiro
Mensagens: 407
Registrado em: 02 Fev 2009, 13:40
Contato:

Re: Colocando "publicar" no componente

Mensagem 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 ....
Responder