Thanks, this brought together enough information that I could get the 
module working properly on its own.
Looking at the code in a GanttChart generator (took a while finding a 
module that did what I needed) helped with finding how the templates and 
passing data through Genshi works.

On Tuesday, 4 October 2016 07:07:37 UTC+1, Cooke, Mark wrote:
>
> Good Morning, 
>
> > -----Original Message----- 
> > From: [email protected] <javascript:> On Behalf Of 
> [email protected] <javascript:> 
> > Sent: 03 October 2016 17:48 
> > 
> > Hi, 
> > Effectively following on from creating a new menu item in mainnav (from 
> Basic 
> > Egg Cooking tutorial) and creating a new page, I need to find a sane way 
> of 
> > trying to maintain page consistency with Trac. 
> > ie, generating a page via this method does not pull in any CSS from 
> Trac, 
> > neither does it pull in any blocks such as the banner or the mainnav 
> bar. 
> > 
> > Is there a normal way to do this? Using templates and presenting the 
> page as 
> > a template may be a solution, but any example given on the docs only 
> pulls in 
> > a static page from the server, and not a dynamically created one. There 
> seems 
> > to be insufficient documentation on handling this - unless someone can 
> point 
> > me in the right direction for docs? 
> > 
> > ie: 
> > work from https://trac-hacks.org/wiki/EggCookingTutorial/BasicEggCooking 
> > change // abuffer = 'Hello world!' // to // abuffer = MyPythonScript() 
> // 
> > 
> > 
> > I want to be able to have a block that tells Trac to switch it out to 
> the 
> > banner/metanav/mainnav etc. 
> > 
> > MyPythonScript turns out standard HTML, obviously I have full control 
> over 
> > what comes from this, I just can't find info on what Trac wants, and how 
> to 
> > handle it. Genshi? 
>
> Now that you understand the basic structure of a plugin I would recommend 
> taking a look at something "similar" to what you want from trac-hacks [1] 
> and see how they do it.  From what you write above you just need to stop 
> generating whole HTML and, yes, work with the Genshi engine and the Trac 
> response mechanisms (otherwise you will start bypassing the cookie handling 
> etc. that Trac provides for you). 
>
> [1] https://trac-hacks.org/wiki/HackIndex 
>
> Note that you will need to implement some of the interfaces to get this 
> all working, e.g.: 
>
> class MyPlugin(Component): 
>     """This component provides the <widget> views and declares the 
>     permissions: MY_PERM_1 and MY_PERM_2. 
>     """ 
>
>     implements(INavigationContributor, IRequestHandler, 
>                IPermissionRequestor, ITemplateProvider) 
>
> ...and the related (incomplete!) methods: 
>
>     # 
> ----------------------------------------------------------------------- # 
>     # IRequestHandler methods 
>     def match_request(self, req): 
>         # match if we end with our root, optionally followed by further 
> path 
>         # or query parameters... 
>         return req.path_info.startswith(r'/myplugin') 
>
>     # 
> ----------------------------------------------------------------------- # 
>     def process_request(self, req): 
>         # MUST have at least ' MY_PERM_1' permission... 
>         req.perm.require(MY_PERM_1) 
>
>         html_template = None 
>         data = {} 
>
>         # `add_notice` adds the temporary banners at the top of the 
> contents 
>         #add_notice(req, "type(req) = `%s`" % (type(req),)) 
>         #add_notice(req, "req.path_info = `%s`" % (req.path_info,)) 
>
>         # ...code here... 
>
>         # This tuple is for Genshi (template_name, data, content_type) 
>         # Without `data` the trac layout will not appear. 
>         return html_template, data, None 
>
>     # 
> ----------------------------------------------------------------------- # 
>     # ---------------------------------------------- IPermissionRequestor 
> --- # 
>     # 
> ----------------------------------------------------------------------- # 
>
>     def get_permission_actions(self): 
>         # MY_PERM_2 includes MY_PERM_1... 
>         return (MY_PERM_1, 
>                 (MY_PERM_2, (MY_PERM_1,))) 
>
>     # 
> ----------------------------------------------------------------------- # 
>     # ------------------------------------------------- ITemplateProvider 
> --- # 
>     # 
> ----------------------------------------------------------------------- # 
>     # ITemplateProvider methods: Used to add the plugin's templates and 
> htdocs 
>
>     def get_templates_dirs(self): 
>         from pkg_resources import resource_filename 
>         return [resource_filename(__name__, 'templates')] 
>
>     def get_htdocs_dirs(self): 
>         # '<key>' creates a pseudo-folder for genshi to find your 
> resources 
>         # e.g.  add_stylesheet(req, '<key>/mystyle.css') 
>         from pkg_resources import resource_filename 
>         return [('<key>', resource_filename(__name__, 'htdocs'))] 
>
>
> I hope that helps. 
>
> ~ Mark C 
>   
>

-- 
You received this message because you are subscribed to the Google Groups "Trac 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/trac-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to