Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

#28464
E aí pessoal blz?

Estou procurando uma forma de habilitar as tags: "Alt" para as imagens e "Title" para os links do menu, do rodapé, das categorias e das subcategorias (nas páginas internas) por causa da questão do posicionamento do google e dos demais buscadores. Afinal quem trabalha com comércio eletrônico depende muito disso para que os clientes acessem e conheçam os nossos produtos.

- Achei esse link gringo e subi esse xml (abaixo) dentro do vQmod mas não vi acontecer nada:

http://forum.opencart.com/viewtopic.php?f=24&t=68937

- Arquivo XML:

<modification>
<file name="catalog/controller/product/product.php">
<operation>
<search position="replace"><![CDATA[$this->data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');]]></search>
<add><![CDATA[$this->data['description'] = str_replace('alt=" " ', 'alt= " ' . $product_info['meta_description'] . ' " title= " ' . $product_info['name'] . ' " ', html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'));]]></add>
</operation>
</file>
</modification>

- Achei esses outros links, mas acho que não se trata da mesma questão:

http://forum.opencart.com/viewtopic.php?f=21&t=80442

http://www.exit44.com/2012/05/custom-ti ... -opencart/

Desde já, muito obrigado à todos que puderem ajudar!
Editado pela última vez por witalovs em 01 Out 2012, 14:40, em um total de 1 vez.
#28490
Cara, isso é bem simples na verdade... Vc pode fazer algumas pequenas alterações no seu template para fazer isto funcionar.
Para os menus procure o seguinte código no header.tpl do seu template:
Código: Selecionar todos
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
					  <?php if ($category['children']) { ?>
					  <!--<div>
						<?php for ($i = 0; $i < count($category['children']);) { ?>
						<ul>
						  <?php $j = $i + ceil(count($category['children']) / $category['column']); ?>
						  <?php for (; $i < $j; $i++) { ?>
						  <?php if (isset($category['children'][$i])) { ?>
						  <li><a href="<?php echo $category['children'][$i]['href']; ?>"><?php echo $category['children'][$i]['name']; ?></a></li>
						  <?php } ?>
						  <?php } ?>
						</ul>
						<?php } ?>
					  </div>-->
					  <?php } ?>
					</li>
Se vc prestar atenção ele simplesmente "imprime" o nome da categoria com a variável <?php echo $category['name']; ?> para criar o menu. Vc pode adicionar dentro da tag âncora do menu <a> o seguinte:
Código: Selecionar todos
title="<?php echo $category['name']; ?>"
Faça o mesmo para as subcategorias e pronto.

Para as imagens é basicamente a mesma coisa, só q vc vai procurar a variável q "imprime" o título do artigo e vai adicionar alt="<?php echo $COLOQUE AQUI O NOME DA VARIÁVEL; ?>" e pronto.
Vai dar um pouco de trabalho, mas não é nada difícil.

Espero q ajude :D
Editado pela última vez por unknown1140 em 28 Set 2012, 18:36, em um total de 1 vez.
#28534
E aí Unknown?

Cara fiz como vc falou e deu certo, mas deixa eu te perturbar só mais um pouco pra gente tentar melhorar isso aqui!?

Dessa forma como a gente tá fazendo, nós não conseguimos personalizar a tag "title" pois ela apenas copia o nome que a gente colocou nas categorias, nos produtos e nas páginas de informações! Eu tava pensando na possibilidade da gente criar um campo dentro da administração (nas categorias, nos produtos e nas páginas de informações) para que a gente possa personalizar as tags, ajudando com que o nosso posicionamento diante dos motores de busca melhore!

Aí eu me lembrei que um módulo do vQmod que já tenho instalado que é o "Custom Page Titles" que cria um campo dentro da administração para as categorias, para os produtos e para as páginas de informações (segue o link abaixo do módulo mencionado):

http://www.opencart.com/index.php?route ... e%20titles

Baixei o módulo e abri o arquivo "install-db.sql" que fica dentro da pasta "database" e alterei os "cptitle" para "cttitle" nas linhas de comando:

DE:
Código: Selecionar todos
ALTER TABLE category_description ADD column cptitle VARCHAR(255) NOT NULL;
ALTER TABLE information_description ADD column cptitle VARCHAR(255) NOT NULL;
ALTER TABLE product_description ADD column cptitle VARCHAR(255) NOT NULL;
PARA:
Código: Selecionar todos
ALTER TABLE category_description ADD column cttitle VARCHAR(255) NOT NULL;
ALTER TABLE information_description ADD column cttitle VARCHAR(255) NOT NULL;
ALTER TABLE product_description ADD column cttitle VARCHAR(255) NOT NULL;
E depois eu renomeie o arquivo "custom-page-titles.xml" para "custom-page-titles.xml" e alterei:

- Onde tinha "cptitle" renomeie para "cttitle";

- Onde tinha "entry_cptitle" renomeie para "entry_cttitle";

- Onde tinha "'Custom Page Title:" renomeie para "'Custom Tag Title:";

Mas fiquei com uma dúvida porque como eu não entendo de programação eu não sei o que faz o 'name', ele existe 14 vezes dentro do arquivo XML, e não sei se eu posso renomeá-lo (se eu puder alterar posso fazê-lo nas 14 vezes que ele aparece, lembrando que algumas vezes ele aparece assim ['name'] dentro de um chave) para por exemplo 'tag_title'. Tô cabreiro de fazer e acontecer tipo um conflito (me desculpe a leiguice) pois como eu tinha falado antes já tenho instalado o módulo "Custom Page Titles" que é praticamente idêntico à gambiara que eu fiz (pois é uma simples cópia)!

E como vou utilizar o que vc me ensinou (title="<?php echo $category['name']; ?>") para puxar a "tag title" criada através dos novos campos (palavras personalizadas conforme nosso interesse) para ser exibida nas categorias, nos produtos e nas páginas de informações.

A pergunta é:

Posso alterar o 'name' (para 'tag_title') de dentro do arquivo xml e depois posso alterar o 'name' (para 'tag_title') do title="<?php echo $category['name'] (que vc explicou no post anterior). O 'name' de um e o outro representa a mesma coisa ou não tem nada a vê??? Fico pensando se deixarmos o 'name' nos dois módulos como a expressão (title="<?php echo $category['name']) irá entender qual deles eu quero puxar??? Minha cabeça tá um rolo doido com isso!

Valeu mais uma vez pela ajuda, @unknown1140!!!
#28560
Eu tô tentando fazer diferente, unir no mesmo xml o "cttitle" (tag title) e o "cptitle" (título personalizado da página):

Como faço para unir os dois?

ARQUIVO ATUAL ESTÁ ASSIM:
Código: Selecionar todos
<operation>
		<search position="replace">
		<![CDATA[
				$this->document->setTitle($product_info['name']);]]></search>
			<add>
		<![CDATA[
			if
				(!empty($product_info['cttitle']))
				{$this->document->setTitle($product_info['cttitle']);}
			else
				{$this->document->setTitle($product_info['name']);}
		]]>
			</add>
	</operation>
POSSO FAZER ASSIM?
Código: Selecionar todos
<operation>
		<search position="replace">
		<![CDATA[
				$this->document->setTitle($product_info['name']);]]></search>
			<add>
		<![CDATA[
			if
				(!empty($product_info['cptitle']))
				{$this->document->setTitle($product_info['cptitle']);};
         if
				(!empty($product_info['cttitle']))
				{$this->document->setTitle($product_info['cttitle']);}
			else
				{$this->document->setTitle($product_info['name']);}
		]]>
			</add>
	</operation>
Obrigado aos que puderem ajudar!!!
#28562
Cara, não entendo muito de programação, estou até desconfiando que vc está melhor que eu nessa área :D
Além disso, sei que parece uma absurdo, mas não sei praticamente nada de vQmod... Como estou fazendo os meus próprios templates, já faço tudo que preciso desde o começo do template...
POSSO FAZER ASSIM?
Eu to achando que isto não vai dar certo, pois vc está colocando um if dentro de outro if. Acho q vd teria q criar duas condições diferentes, ou pensar em outra condição. Mas não posso ter certeza, não é a minha praia :/

Espero q ajude em algo :D
#28577
rsrsrs ... ei @unknown1140 essa eu ri viu macho! Sabendo mais que vc é osso nê? A verdade é que infelizmente eu sou bastante ansioso e acabo meu tornando um buliçoso quando não consigo achar a solução!!! Macho eu não entendo nada de programação, mas fico tentar achar a lógica nesses xmls e vou abrir os outros xml e vendo-os como exemplo para tentar adaptá-los à minha necessidade!!!
.
Ei cara valeu pela dica! Mudei um pouco, será que agora dá certo assim!
.
AGORA DEIXEI ASSIM: (troquei o segundo "if" por "elseif")
Código: Selecionar todos
<operation>
		<search position="replace">
		<![CDATA[
				$this->document->setTitle($product_info['name']);]]></search>
			<add>
		<![CDATA[
			if
				(!empty($product_info['cptitle']))
				{$this->document->setTitle($product_info['cptitle']);}
			elseif
				(!empty($product_info['cttitle']))
				{$this->document->setTitle($product_info['cttitle']);}	
			else
				{$this->document->setTitle($product_info['name']);}
		]]>
			</add>
	</operation>
Abraço!!!
#28610
Sei de uma coisa, não posso duplicar tudo nesse módulo XML pois pelo menos uma das suas operações coloca o que foi digitado no campo para o topo da página como titulo!!! Agora como eu vou descobrir qual deles eu não posso duplicar já que não entendo de programação???

Pessoal antes de tudo eu gostaria de pedir desculpas pela extensão do post, mas é porque eu preciso entender o que cada uma dessas operações do vQmod fazem nesse xml (http://www.opencart.com/index.php?route ... ge%20title) para que eu possa adaptá-lo e duplicar apenas o que for interessante para criar as Tag Title nos links das categorias, dos produtos e das páginas de informações!!!

O que faz essa 1ª operação (admin/model/catalog/product.php):
Código: Selecionar todos
<operation>
		<search position="replace">
		<![CDATA[$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "'");]]></search>
			<add>
		<![CDATA[$this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', cptitle = '" . $this->db->escape($value['cptitle']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "'");]]></add>
	</operation>
O que faz essa 2ª operação (admin/model/catalog/product.php):
Código: Selecionar todos
<operation>
		<search position="after">
		<![CDATA['name' => $result['name'],]]></search>
			<add>
		<![CDATA['cptitle' => $result['cptitle'],]]>
		    </add>
        </operation>
O que faz essa 3ª operação (admin/controller/catalog/product.php):
Código: Selecionar todos
<operation>
		<search position="after">
		<![CDATA[$this->data['entry_name'] = $this->language->get('entry_name');]]></search>
			<add>
		<![CDATA[$this->data['entry_cptitle'] = $this->language->get('entry_cptitle');]]>
		    </add>
	</operation>
O que faz essa 4ª operação (admin/language/english/catalog/product.php):
Código: Selecionar todos
<operation>
		<search position="after">
		<![CDATA[$_['entry_name'] = 'Product Name:';]]></search>
			<add>
		<![CDATA[$_['entry_cptitle'] = 'Custom Page Title:';]]>
		    </add>
	</operation>
O que faz essa 5ª operação (admin/view/template/catalog/product_form.tpl):
Código: Selecionar todos
<operation>
		<search position="before" offset="1">
		<![CDATA[
				<td><?php echo $entry_meta_description; ?></td>]]></search>
			<add>
		<![CDATA[
			<tr>
                <td><?php echo $entry_cptitle; ?></td>
                <td><input type="text" name="product_description[<?php echo $language['language_id']; ?>][cptitle]" size="100" value="<?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['cptitle'] : ''; ?>" /></td>
			</tr>	]]></add>
	</operation>
O que faz essa 6ª operação (catalog/controller/product/product.php):
Código: Selecionar todos
<operation>
		<search position="replace">
		<![CDATA[
				$this->document->setTitle($product_info['name']);]]></search>
			<add>
		<![CDATA[
			if
				(!empty($product_info['cptitle']))
				{$this->document->setTitle($product_info['cptitle']);}
			else
				{$this->document->setTitle($product_info['name']);}]]>
			</add>
	</operation>
O que faz essa 7ª operação (catalog/model/catalog/product.php):
Código: Selecionar todos
<operation>
		<search position="after">
		<![CDATA['name' => $query->row['name'],]]></search>
			<add>
		<![CDATA['cptitle' => $query->row['cptitle'],]]></add>
	</operation>
Ah pessoal uma dúvida! Como faço para anexar arquivos aqui, para que possam ser analisadas as alterações que fiz no arquivo?

Obrigado a todos...
#28677
Quero agradecer a ajuda que o @vipersbr deu-me pelo msn!

Esse passo de compreender o que cada uma das operações (operation) fazem, está praticamente resolvido!

Agora resta-nos saber como fazer para "habilitar" a 'cptitle' como está habilitado 'name', pois é a única que dá certo! Já foi criado o campo na admistração do Opencart para preenher a 'cptitle' que também já foi criada no banco de dados!

Conforme a dica do @unknown1140, colocamos a expressão (<?php echo $category['name']; ?>) dentro no <a> na linha (<li><a href="<?php echo $category['href']; ?>><?php echo $category['name']; ?></a>) do header.tpl que fica no public_html\catalog\view\theme\default\template\common\. Porém quando juntamos tudo e alteramos o 'name' para 'cttitle', ele mostra o erro à seguir: <b>Notice</b>: Undefined index: cttitle in <b>/home/metaospano/public_html/catalog/view/theme/default/template/common/header.tpl</b> on line <b>76</b>

Quem puder ajudar, agradecemos desde já!