If you're invoking the getData method i would use a behavior, but if it's
goin to work by itself (without you calling a method) I would go with a
component, like Mark said.

Cya,
--
***Thiago Belem*
Desenvolvedor
Rio de Janeiro - RJ - Brasil

thiagobelem.net
[email protected]

*Skype / gTalk **»* thiago.belem.web
*LinkedIn* *»* br.linkedin.com/in/thiagobelem/pt*
Assando Sites*, curso de CakePHP *»* assando-sites.com.br


On Mon, Apr 9, 2012 at 22:47, euromark <[email protected]> wrote:

> I was more thinking about a more "automatically" working component then
> Which - if enabled - fetches the appropriate meta information for this
> action and passes it on.
> this component can also add the helper automatically and the helper would
> do the rest on its own.
> otherwise you are not using the full potential of it.
>
> and using a behavioral approach as Thiago suggested would probably also
> work.
> But I' probably go for the component.
>
>
> Am Dienstag, 10. April 2012 03:36:48 UTC+2 schrieb Thiago Belem:
>
>> Why don't you put this getMeta method inside your model or create a
>> behavior?
>>
>>
>>
> Thiago Belem
>>
>> Enviado do meu Android (e sujeito a erros do corretor automático)
>> Em 09/04/2012 22:24, "creat1v1ty" <[email protected]> escreveu:
>>
>>> Thanks again euromark - I've taken your advice and tips and created a
>>> SEO Component, which I feel is the best solution. It keeps my MVC
>>> conventions in tact and hopefully is a more efficient way of doing what I
>>> need to do.
>>>
>>> Here is what I have now:
>>>
>>> *SeoComponent.php*
>>> ==============================**===
>>> public function getTags($page) {
>>>     App::import('Model', 'Meta');
>>>     $Model = ClassRegistry::init('Meta');
>>>     $seo_data = $Model->find('first', array('conditions' =>
>>> array('Meta.page' => $page)));
>>>     $seo_tags['title'] = $seo_data['Meta']['title'];
>>>     $seo_tags['description'] = $seo_data['Meta']['**description'];
>>>     $seo_tags['keywords'] = $seo_data['Meta']['keywords'];
>>>     return $seo_tags;
>>> }
>>>
>>> *PagesController.php*
>>> ==============================**===
>>> public function home($page) {
>>>     $this->set('page', $page);
>>>     $this->set('seo_tags', $this->Seo->getTags($page));
>>> }
>>>
>>> *default.ctp*
>>> ==============================**===
>>> <?php echo $seo_tags['title']; ?>
>>> <?php echo $seo_tags['description']; ?>
>>> <?php echo $seo_tags['keywords']; ?>
>>>
>>>
>>> Please feel free to comment and/or make suggestions on any ways I might
>>> be able to further refine/improve. Thanks again for all your help!
>>>
>>>
>>>
>>> On Monday, April 9, 2012 7:33:19 PM UTC-5, euromark wrote:
>>>>
>>>> I am not saying you can never break MVC or cake conventions. I do so
>>>> myself occasionally. But it should have sane reasoning then.
>>>> In your case it could be also solved using a component which does what
>>>> you are doing in the view - fetching the data from the model.
>>>> It could then pass it down to the view level where you only have to
>>>> display it.
>>>> That would be in MVC (fetching model data in the view layer is
>>>> considered breaking it).
>>>>
>>>> But your solution simplifies the task. So as long as it doesn't break
>>>> other (real) things it is not completely wrong to intentionally go down
>>>> this road.
>>>>
>>>>
>>>>
>>>> Am Dienstag, 10. April 2012 00:07:24 UTC+2 schrieb creat1v1ty:
>>>>>
>>>>> Thanks very much for the insights, euromark. Here is some additional
>>>>> info based on your questions:
>>>>>
>>>>> *Not sure if breaking MVC is really the best way to go here* -
>>>>> breaking MVC is not something I am doing intentionally. To be completely
>>>>> honest, I don't know how doing what I'm doing breaks MVC...perhaps you can
>>>>> help me understand that. My goal is to keep my code as clean and semantic
>>>>> as possible.
>>>>>
>>>>> *Also not sure how you want to pass $page (is it the final url after
>>>>> routing or the prefix/plugin/controller/action/ string?)* - for the
>>>>> pages of the site that are managed by the PagesController, I am relying on
>>>>> the default variable Cake uses ($page), which is set in routes.php.
>>>>>
>>>>> *ex:  Router::connect('/about', array('controller' => 'pages',
>>>>> 'action' => 'display', 'about'));*
>>>>>
>>>>> For pages not managed by the PagesController, I am setting the $page
>>>>> variable for each action in that controller.
>>>>>
>>>>> *ex:  $this->set('page', 'contact-index');*
>>>>>
>>>>> *If you want people to contribute and discuss your code in detail,
>>>>> you should open a github rep for it* - I appreciate the tip and will
>>>>> definitely keep this in mind going forward. With this request, however, 
>>>>> the
>>>>> code I've written is pretty minimal - the extent of it is in my original
>>>>> post. I do understand, however, that seeing code in its context is much
>>>>> more efficient.
>>>>>
>>>>> *PS: it also sounds like something that could be made a "Seo" plugin
>>>>> to make it available for multiple apps.* - I agree completely, and
>>>>> would love to pass something beneficial along to others to use as well.
>>>>> However, I don't really feel comfortable pitching something that isn't
>>>>> built correctly, or outside of MVC conventions. Also, I don't really have
>>>>> the experience with Cake to understand what's needed to build a plugin, 
>>>>> and
>>>>> how I can take what I've done and turn it into one. That being said, I am
>>>>> definitely open to suggestions and help in doing it.
>>>>>
>>>>> Thanks again, euromark.
>>>>>
>>>>> On Monday, April 9, 2012 4:31:33 PM UTC-5, euromark wrote:
>>>>>>
>>>>>> IF you really need to use a model in this context you should never
>>>>>> use "new" but ClassRegistry:
>>>>>>
>>>>>> $Model = ClassRegistry::init('Meta');
>>>>>>
>>>>>> Not sure if breaking MVC is really the best way to go here. But if it
>>>>>> works for you, nobody will force you to
>>>>>> undo your obviously working code. Also not sure how you want to pass
>>>>>> $page (is it the final url after routing or
>>>>>> the prefix/plugin/controller/**actio**n/ string? both solutions
>>>>>> could work, might have different pros and cons.
>>>>>> Other than that it looks fine. I know there are some plugins which do
>>>>>> it not that much different you do.
>>>>>>
>>>>>> Without specific inside in your application there is only so much one
>>>>>> can suggest.
>>>>>> Just take the "silence" regarding your thread as a "not beautiful,
>>>>>> but not really problematic either".
>>>>>> Everything else is your thing. Not ours.
>>>>>> If you want people to contribute and discuss your code in detail, you
>>>>>> should open a github rep for it.
>>>>>> So others can fork or submit issues. Reading through a lot of code
>>>>>> without code highlighting is no fun.
>>>>>>
>>>>>> PS: it also sounds like something that could be made a "Seo" plugin
>>>>>> to make it available for multiple apps.
>>>>>> you never know when you will need it (or others for that matter).
>>>>>> Just something to think about.
>>>>>> But then use: `$Model = ClassRegistry::init('Seo.Meta'****);` :)
>>>>>>
>>>>>> good luck
>>>>>> mark
>>>>>>
>>>>>>
>>>>>> Am Montag, 9. April 2012 21:37:51 UTC+2 schrieb creat1v1ty:
>>>>>>>
>>>>>>> anyone out there have any suggestions/recommendations for me?
>>>>>>>
>>>>>>> Thanks in advance.
>>>>>>>
>>>>>>  --
>>> Our newest site for the community: CakePHP Video Tutorials
>>> http://tv.cakephp.org
>>> Check out the new CakePHP Questions site http://ask.cakephp.org and
>>> help others with their CakePHP related questions.
>>>
>>>
>>> To unsubscribe from this group, send email to
>>> cake-php+unsubscribe@**googlegroups.com<cake-php%[email protected]>For
>>>  more options, visit this group at
>>> http://groups.google.com/**group/cake-php<http://groups.google.com/group/cake-php>
>>>
>>

-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
[email protected] For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to