I've been dealing with a plone upgrade and I think I'm almost done cleaning things up.
This latest error is getting me...
In the main_template I get an error:
Macro Expansion failed
exceptions.NameError: name 'pathexpr' is not defined
I traced it back to coming from the portlets_fetcher template. This one came out of the box but it's still throwing the error.
I don't get it, I see right there:
tal:define="pathexpr python:slot[0];
usemacro python:slot[1];"
anyone know why I'm getting this?
My troubleshooting, I got the error trying to edit the custom main_template. I didn't see pathexpr anywhere so I used the find tab on the skins folder and the only result was for portlets_fetcher. I copied portlets_fetcher to custom and saw the same error there.
edit: Here is the portlets_fetcher template:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="plone">
<body>
<metal:leftcolumn define-macro="left_column"
tal:define="Iterator python:modules['Products.CMFPlone'].IndexIterator;
tabindex python:Iterator(pos=10000, mainSlot=False);"0
tal:condition="sl|nothing">
<metal:block tal:repeat="slot sl">
<tal:dontcrash tal:on-error="structure python:context.plone_log('Error %s on %s while rendering portlet %s'%(error.type, error.value, slot[0])) or
'<div class=\'error\'>Error %s on %s: %s</div>' % (error.type, slot[0], error.value)"
tal:define="pathexpr python:slot[0];
usemacro python:slot[1];">
<tal:block tal:condition="usemacro">
<metal:block metal:use-macro="python:path(pathexpr)" />
</tal:block>
<span tal:condition="not: usemacro"
tal:replace="structure python:path(pathexpr)" />
</tal:dontcrash>
</metal:block>
</metal:leftcolumn>
<metal:rightcolumn define-macro="right_column"
tal:define="Iterator python:modules['Products.CMFPlone'].IndexIterator;
tabindex python:Iterator(pos=20000, mainSlot=False);"
tal:condition="sr">
<metal:block tal:repeat="slot sr">
<tal:dontcrash tal:define="pathexpr python:slot[0];
usemacro python:slot[1];">
<tal:block tal:condition="usemacro">
<metal:block metal:use-macro="python:path(pathexpr)" />
</tal:block>
<span tal:condition="not: usemacro"
tal:replace="structure python:path(pathexpr)" />
</tal:dontcrash>
</metal:block>
</metal:rightcolumn>
</body>
</html>
and here is the main_template:
<metal:page define-macro="master"><metal:doctype define-slot="doctype"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></metal:doctype>
<metal:block define-slot="top_slot" />
<metal:block use-macro="here/global_defines/macros/defines" />
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en"
lang="en"
tal:attributes="lang language;
xml:lang language">
<tal:cache tal:define="lang language;
charset site_properties/default_charset|string:utf-8">
<metal:cache use-macro="here/global_cache_settings/macros/cacheheaders">
Get the global cache headers located in global_cache_settings.
</metal:cache>
</tal:cache>
<head metal:use-macro="here/header/macros/html_header">
<metal:fillbase fill-slot="base">
<metal:baseslot define-slot="base">
<base href="" tal:attributes="href here/renderBase" />
</metal:baseslot>
</metal:fillbase>
<metal:headslot fill-slot="head_slot">
<metal:headslot define-slot="head_slot" />
<tal:comment replace="nothing"> A slot where you can insert elements in the header from a template </tal:comment>
</metal:headslot>
<metal:styleslot fill-slot="style_slot">
<tal:comment replace="nothing"> A slot where you can insert CSS in the header from a template </tal:comment>
<metal:styleslot define-slot="style_slot" />
</metal:styleslot>
<metal:cssslot fill-slot="css_slot">
<tal:comment replace="nothing"> This is deprecated, please use style_slot instead. </tal:comment>
<metal:cssslot define-slot="css_slot" />
</metal:cssslot>
<metal:javascriptslot fill-slot="javascript_head_slot">
<tal:comment replace="nothing"> A slot where you can insert javascript in the header from a template </tal:comment>
<metal:javascriptslot define-slot="javascript_head_slot" />
</metal:javascriptslot>
</head>
<body tal:attributes="class here/getSectionFromURL;
dir python:test(isRTL, 'rtl', 'ltr')">
<div id="visual-portal-wrapper">
<div id="portal-top" i18n:domain="plone">
<div id="portal-header">
<p class="hiddenStructure">
<a accesskey="2"
tal:attributes="href string:${current_page_url}#documentContent"
i18n:translate="label_skiptocontent">Skip to content.</a> |
<a accesskey="6"
tal:attributes="href string:${current_page_url}#portlet-navigation-tree"
i18n:translate="label_skiptonavigation">Skip to navigation</a>
</p>
<div metal:use-macro="here/global_siteactions/macros/site_actions">
Site-wide actions (Contact, Sitemap, Help, Style Switcher etc)
</div>
<!--div metal:use-macro="here/global_searchbox/macros/quick_search">
The quicksearch box, normally placed at the top right
</div-->
<a metal:use-macro="here/global_logo/macros/portal_logo">
The portal logo, linked to the portal root
</a>
<!--div metal:use-macro="here/global_skinswitcher/macros/skin_tabs">
The skin switcher tabs. Based on which role you have, you
get a selection of skins that you can switch between.
</div-->
<div metal:use-macro="here/global_sections/macros/portal_tabs">
The global sections tabs. (Welcome, News etc)
</div>
</div>
<div metal:use-macro="here/global_personalbar/macros/personal_bar">
The personal bar. (log in, logout etc...)
</div>
<!--div metal:use-macro="here/global_pathbar/macros/path_bar">
The breadcrumb navigation ("you are here")
</div-->
</div>
<!--div class="visualClear" id="clear-space-before-wrapper-table" /-->
<tal:comment replace="nothing">
The wrapper table. It contains the three columns. There's a table-less
alternative in the plone_tableless skin layer that you can use if you
prefer layouts that don't use tables.
</tal:comment>
<table id="portal-columns">
<tbody>
<tr>
<tal:comment replace="nothing"> Start of the left column </tal:comment>
<td id="portal-column-one"
metal:define-slot="column_one_slot"
tal:condition="sl">
<div class="visualPadding">
<metal:portlets define-slot="portlets_one_slot">
<metal:leftportlets use-macro="here/portlets_fetcher/macros/left_column">
This instruction gets the portlets (boxes) for the left column.
</metal:leftportlets>
</metal:portlets>
</div>
</td>
<tal:comment replace="nothing"> End of the left column </tal:comment>
<tal:comment replace="nothing"> Start of main content block </tal:comment>
<td id="portal-column-content"
tal:define="tabindex python:Iterator(pos=0, mainSlot=True)">
<metal:block define-slot="content">
<div id="content"
metal:define-macro="content"
tal:define="show_border python:here.showEditableBorder(template_id=template_id, actions=actions );"
tal:attributes="class python:test(show_border,'documentEditable','')">
<metal:ifborder tal:condition="show_border" >
<tal:block tal:condition="not:here/isAnonymousUser">
<div metal:use-macro="here/global_contentviews/macros/content_views">
The content views (View, Edit, Properties, Workflow)
</div>
<div metal:use-macro="here/global_contentviews/macros/content_actions">
The content bar
</div>
</tal:block>
</metal:ifborder>
<div class="documentContent" id="region-content">
<a name="documentContent"></a>
<div metal:use-macro="here/global_statusmessage/macros/portal_message">
Portal status message
</div>
<metal:bodytext metal:define-slot="main" tal:content="nothing">
Page body text
</metal:bodytext>
<metal:sub metal:define-slot="sub">
<metal:discussion use-macro="here/viewThreadsAtBottom/macros/discussionView" />
</metal:sub>
</div>
</div>
</metal:block>
</td>
<tal:comment replace="nothing"> End of main content block </tal:comment>
<tal:comment replace="nothing"> Start of right column </tal:comment>
<td id="portal-column-two"
metal:define-slot="column_two_slot"
tal:condition="sr">
<div class="visualPadding">
<metal:portlets define-slot="portlets_two_slot">
<metal:rightportlets use-macro="here/portlets_fetcher/macros/right_column">
This instruction gets the portlets (boxes) for the right column.
</metal:rightportlets>
</metal:portlets>
</div>
</td>
<tal:comment replace="nothing"> End of the right column </tal:comment>
</tr>
</tbody>
</table>
<tal:comment replace="nothing"> end column wrapper </tal:comment>
<div class="visualClear" id="clear-space-before-footer"><!-- --></div>
<hr class="netscape4" />
<metal:block i18n:domain="plone">
<metal:footer use-macro="here/footer/macros/portal_footer">
Footer
</metal:footer>
<metal:colophon use-macro="here/colophon/macros/colophon">
The colophon area - contains details about the production of
the site. Typically "powered by" buttons, standards, tools used.
</metal:colophon>
</metal:block>
</div>
</body>
</html>
</metal:page>
Appears that this wasn't the root of the issue. Will open another inquiry with proper info.
Thanks for looking!
Related
I have registered a custom view for the faceted navigation, but I want to override the description slot.
In the body I have :
<metal:content-description fill-slot="content-description">
<metal:block define-macro="content-description">
My custom Description
</metal:block>
</metal:content-description>
<metal:content-core fill-slot="content-core">
<metal:block define-macro="content-core">
...
But this doesn't work, I've got the legacy description instead... The content-part is working.
Is there is something am I missing ?
It's not in the custom faceted preview template that you have to add the description.
You have to override the eea.facetednavigation.browser.template.view.pt and add your description.
<tal:left define="hidden python:request.set('disable_plone.leftcolumn', view.hide_left_column)" />
<tal:right define="hidden python:request.set('disable_plone.rightcolumn', view.hide_right_column)" />
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"
lang="en-US"
metal:use-macro="here/main_template/macros/master"
i18n:domain="eea">
<metal:jsslot fill-slot="javascript_head_slot">
<script type="text/javascript"
tal:content="string:jQuery(document).ready(function(evt){
Faceted.Load(evt, '${context/absolute_url}/');
});"></script>
<script type="text/javascript"
tal:content="string:jQuery(window).unload(function(){
Faceted.Unload();
});"></script>
</metal:jsslot>
<body>
<metal:content-description fill-slot="content-description">
<metal:block define-macro="content-description">
<div class="documentDescription" tal:condition="context/rich_description">
<tal:r tal:replace="structure context/rich_description">Description</tal:r>
</div>
</metal:block>
</metal:content-description>
<div metal:fill-slot="content-core">
<!-- Folder contents -->
<div class="faceted-form" metal:define-macro="widgets" id="faceted-form"
tal:define="mode view/mode | string:view" tal:attributes="data-mode mode">
<!-- Basic/Extended search -->
<div class="faceted-sections-buttons">
More filters
Less filters
</div>
<metal:widgets use-macro="here/##faceted_widgets/macros/widgets" />
<!-- Faceted version -->
<div style="display: none" id="faceted-version"
tal:content="here/##faceted_version|string:" />
</div>
</div>
</body>
</html>
I've been reading about user controls on msdn, and I was wondering how does one deal with element IDs that may be variable?
For example, say I have usercontrol1.ascx on my page that contains this:
<div id="myPageDiv1">
<div id="container1">
Contents
</div>
</div>
What if I need the IDs to be different across different pages?
Maybe I need another page that needs to look like this:
<div id="myPageDiv2">
<div id="container3">
Contents
</div>
</div>
Thanks
You could add a property to your usercontrol so you can change it on a page-by-page basic:
UserControl
Public Property SomeDivID as String
ASPX
<div id="<%= Me.SomeDivID %>">
</div>
Page
<control:yourusercontrol SomeDivID="myPageDiv1" runat="server" />
<control:yourusercontrol SomeDivID="myPageDiv2" runat="server" />
You can define a property in your user control.
Public Property DivName As String
You can set it in your codebehind to your desired name. You can even pass this from your controlling page.
DivName = "MyDesiredDivName"
Then you can use crocodile syntax in your markup to render the value of the property.
<div id="<%= Me.DivName %>">
<div id="container1">
Contents
</div>
</div>
Is there a pattern or anything I can do to load remote asp.net views properly? I have my index page that basically looks like this:
Index page works fine using new kendo.mobile.Application(document.forms[0]):
<form runat="server">
<div data-role="view" id="indexPageInitialView"> ... </div>
<div data-role="view" id="indexPageOtherView"> ... </div>
</form>
Remote view page issue:
<form runat="server">
<div data-role="view" id="remoteView1"> ... </div>
<div data-role="view" id="remoteView2"> ... </div>
</form>
I know Kendo loads remote views that can be [at most] descendants within the body tag, so I am thinking I'm backed into a corner here.
Update
When I attempt to simply load the remote view that is surrounded with the form tag, I get this error:
Uncaught TypeError: Cannot call method 'getAttribute' of undefined kendo.all.min.js:9
kendo.initWidget kendo.all.min.js:9
w.extend._createView kendo.all.min.js:31
w.extend._createRemoteView kendo.all.min.js:31
(anonymous function) kendo.all.min.js:31
l jquery.min.js:2
c.fireWith jquery.min.js:2
T jquery.min.js:2
r
If I nest the form tag within the remote view, it works, however, that is not a viable solution.
Update 2
Here is a more complete example of my situation.
index.aspx:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Index</title>
</head>
<body>
<form runat="server">
<div id="indexPageInitialView" data-role="view">
<div data-role="content">
Load remote view
</div>
</div>
</form>
<script src="jquery.min.js"></script>
<script src="kendo.all.min.js"></script>
<script>
var app = new kendo.mobile.Application(document.forms[0]);
</script>
</body>
</html>
remote.aspx:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Remote</title>
</head>
<body>
<form runat="server">
<div id="remoteView1" data-role="view">
<div data-role="content">
<h1>Hi I am a remote view</h1>
</div>
</div>
</form>
</body>
</html>
Kendo will load only the first view found in the remote view. So if you make the call to remote view correctly, remoteView1 should load. If this is not the answer you are looking for, please post the full code in JSFiddle with more description.
I am working on asp.net website using webforms & i am facing strange problems for some unknown reason.
I am different banner in different areas of teh page & one common banner in the header section of the MasterPage, Banner show up as it should but problem is that link with the banner is not working.
Below is the partial code generated after page display.
<div class="horizontalBannerBar">
<!-- Header Banner -->
<div class="pnlHeaderBanner" id="pnlHeaderBanner">
<a target="_blank" href="http://abc.com" class="bannerlink" id="hypLnkHeaderBanner"><img style="border-width:0px;" src="../images/Banners/32dfe9ee-0832-4d89-8c61-45b0ef371f1f.jpg" id="imgHeaderBanner"></a>
</div>
<!-- Header Banner -->
</div>
I am using Panel as a wrapper so that i can hide the banner in case banner is not present .
Below us the Code i use to assign value to hyperlink control & image control
DataSet ds = DataProvider.GetTopBanner(ArticleID, PageID, IssueID, CategoryID, BannerLayoutPosition, LangID);
if (ds.Tables[0].Rows.Count > 0)
{
imgHeaderBanner.ImageUrl = ds.Tables[0].Rows[0]["ImagePath"].ToString();
hypLnkHeaderBanner.NavigateUrl = ds.Tables[0].Rows[0]["BannerURL"].ToString();
}
else
{
imgHeaderBanner.Visible = false;
pnlHeaderBanner.Visible = false;
}
Actual .ASPX page code
<div class="horizontalBannerBar">
<!-- Header Banner -->
<asp:Panel ID="pnlHeaderBanner" CssClass="pnlHeaderBanner" runat="server">
<asp:HyperLink ID="hypLnkHeaderBanner" CssClass="bannerlink" runat="server" Target="_blank">
<asp:Image ID="imgHeaderBanner" runat="server" BorderWidth="0" />
</asp:HyperLink>
</asp:Panel>
<!-- Header Banner -->
</div>
It seems HTML is breaking up somewhere but i am not able to see it even on fiddle it doent work in FF & Chrome while link works in IE 9..
Example LINK
It's because of the z-index: -999; in your CSS. If you set it to 0 then your link will work.
Also the <img /> tag is not properly closed in the HTML sample you posted at the top. I doubt that's the actual HTML generated by ASP.NET though.
<div class="horizontalBannerBar">
<!-- Header Banner -->
<div class="pnlHeaderBanner" id="pnlHeaderBanner">
<a target="_blank" href="http://abc.com" class="bannerlink" id="hypLnkHeaderBanner">
<img style="border-width:0px;" src="../images/Banners/32dfe9ee-0832-4d89-8c61-45b0ef371f1f.jpg" id="imgHeaderBanner" />
</a>
</div>
<!-- Header Banner -->
</div>
I have tried passing the hidden field value using href. Below is the code snippet for the same and it is not working. I do not want to use java script function as I want this to work in a particular scenario when java script is disabled by the user. Value of the variable is set in code behind
<form name ="hiddenform" method="get" action="a1.asp">
<input type="hidden" id="hasflash" value=" " />
<div class="header" id="check" style="color: red;">
please <a href="a1.asp?hasflash"+<%=hasflash.Value%>>upgrade your add-on software</a>
</div>
I have also tried the below code:
<div class="header" id="check" style="color: red;">
please <a href=("a1.asp?hasflash={0}",hasflash.Value)>upgrade your add-on software</a>
</div>
Try
<div class="header" id="check" style="color: red;">
please upgrade your add-on software
</div>
First you need to add runat="server" to your hidden field
<input type="hidden" runat="server" id="hasflash" Value="SomeValues" />
Then you can achieve that in 2 or more ways
please upgrade your add-on software
or
please <a href='<%= String.Format("a1.asp?hasflash={0}",hasflash.Value) %>'>upgrade your add-on software</a>