Use other Part instead of TitlePart in menu - orchardcms

I have a menu that has alot of query links. That will generate a good menu with the content of the TitlePart as the text.
I would like to use another parts field, that I have made, instead of the text in the TitlePart. Only in the menu and not on the contents page.
Is there a possibility to modify some module in order to achive this or is there a placement I can use to solve the problem??

I solved the problem by inserting this
protected override void GetItemMetadata(GetContentItemMetadataContext context)
{
var part = context.ContentItem.As<ReferenceCompanyPart>();
if (part != null && part.CompanyName!= null && part.CompanyName != "") {
context.Metadata.DisplayText = part.CompanyName;
}
else {
var titlepart = context.ContentItem.As<ITitleAspect>();
context.Metadata.DisplayText = titlepart != null ? titlepart.Title : "";
}
}
Then my ReferenceCompanyName was used insted of the TitlePart in the menu

Related

Displaying data from CMS_User in kentico

I have user control and I want to fill a drop-down list form control with CMS User table with a condition on it. could you please help me to do it. thank you in advance
for someone who needs, the answer is here (the where condition depends on the type of search you have, so I left it empty) :
public void FillUsers()
{
string where = "";
var UserColumns = UserInfoProvider.GetUsers().Columns("UserID", "FullName", "BusinessUnitId").Where(where).OrderBy("asia_personalcode");
if (UserColumns != null)
{
DataSet ds = UserColumns;
if (!DataHelper.DataSourceIsEmpty(ds))
{
cmbUser.DataSource = ds;
cmbUser.DataTextField = "FullName";
cmbUser.DataValueField = "UserID";
cmbUser.DataBind();
cmbUser.Items.Insert(0, "-");
cmbUser.Items[0]``.Value = "";
}
}
}

Acumatica Modern Interface, is it possible to control the number of rows when collapsed

When using the collapsed interface on the sales order (AKA the arrow tiny button to the right) is it possible to do one of the following:
Change the fields it displays (eg: right now I am showing some labels for the fields below in those columns). It would be truly amazing if when I click that, I could move some of the fields from the first column to the top 2 rows. Thus, I would move the most important data from the first column to the header.
Alternately, can you make the top be 3-4 rows instead of just 2, or is that hard coded in?
Thanks in advance.
Form container Autosize element and MinHeight/MinHeightLimit properties does affect the behavior of the expander but I haven't found a way to achieve the desired functionality with those.
This is the code which generates the form panel Div element:
/// <summary>
/// Create the content division control.
/// </summary>
private WebControl CreateContentDiv()
{
WebControl div = this.TemplateContainer;
this.hasStaticContent = this.AutoSizeWindow;
if (hasStaticContent) foreach (Control c in div.Controls)
{
IAutoSizedControl sc = c as IAutoSizedControl;
if (sc != null && sc.AutoSize.Enabled) { hasStaticContent = false; break; }
var wc = c as WebControl;
var hc = c as System.Web.UI.HtmlControls.HtmlControl;
if (wc != null || hc != null)
{
string pos = (wc != null) ? wc.Style["position"] : hc.Style["position"];
if (pos == "absolute") { hasStaticContent = false; break; }
}
}
if (!hasStaticContent && (!ControlHelper.GetHeight(this).IsEmpty || this.AutoSize.Enabled))
div.Height = Unit.Percentage(100);
// mark division as editable region
if (this.DesignMode)
div.Attributes.Add(DesignerRegion.DesignerRegionAttributeName, "0");
return div;
}
I also found elements that suggests the 2 row value is hardcoded for the purpose of showing the expander control (if content height is taller then 2 row show expander control):
/// <summary>
///
/// </summary>
protected override void OnLoad(EventArgs e)
{
if (this.Page != null && !this.Page.IsCallback)
{
var gen = (PXLayoutGenerator)this.TemplateContainer;
gen.CreateStackByRules();
if (!this.CaptionAsLink && !this.AutoSize.Enabled)
{
if (this.AllowCollapse == null && gen.Rows > 2) this.AllowCollapse = true;
//if (this.AllowCollapse == true && !this.CaptionVisible) this.CreateCollapseImage();
}
}
base.OnLoad(e);
}
With JavaScript it would possible to roll your own logic to control the UI layer.
Setting the TabPanel style height property will achieve the desired rendering and it should be possible to hook the expander events too:
document.getElementById('ctl00_phF_form_t0').style.height = '117px';
To re-order the editor control based on the form collapsed state is a bit more difficult depending on the layout but can be achieved similarly by setting the CSS display property:
var isVisible = false;
document.getElementById(alse'ctl00_phF_form_t0_edCustomerID_text').parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.style.display = isVisible ? 'block' : 'none';

Connect marker with EditPart

I have a graphical editor which extends GraphicalEditorWithFlyoutPalette.
There could be appear different markers, so it would be nice, if there is any possibility to connect the marker with the EditPart.
I think one possibility is to extend the TableViewer and the corresponding cell classes. But perhaps there is a better and more easier way.
I create my test markers like following:
IResource resource = (IResource) input.getAdapter(IResource.class);
try
{
IMarker marker = resource.createMarker(IMarker.PROBLEM);
marker.setAttribute(IMarker.TEXT, "text");
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
marker.setAttribute(IMarker.MESSAGE, "message");
}
catch (CoreException e)
{
e.printStackTrace();
}
input is my IEditorInput.
In my first attempt, I was trying to extends the ExtendedMarkersView, which fails because it is an internal class.
Another way was to write the view and all corresponding stuff new, but it seems to be senseless.
So I found a work around based on https://stackoverflow.com/a/10501971/390177.
While creating the IMarker, I set additional attributes to link the corresponding data object. With the help of the object I can search for the AbstractGraphicalEditPart with the EditPartRegistry.
After that it is possible to create a selection on the EditPart and reveal to it.
#Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
IStructuredSelection s = (IStructuredSelection) selection;
if (s.getFirstElement() instanceof MarkerItem) {
MarkerItem marker = (MarkerItem) s.getFirstElement();
if (marker != null && marker.getMarker() != null) {
IMarker iMarker = marker.getMarker();
AbstractGraphicalEditPart editPart = null;
DataObject object ...
editPart = (AbstractGraphicalEditPart) getGraphicalViewer().getEditPartRegistry().get(object);
if (editPart != null) {
StructuredSelection eSelection = new StructuredSelection(editPart);
getGraphicalViewer().setSelection(eSelection);
// once selected if you want to get it so the
// graphicalviewer scrolls to reveal the part on the
// screen
getGraphicalViewer().reveal(editPart);
}
}
} else {
super.selectionChanged(part, selection);
}
}

MonoTouch Dialog elements are not updating/repainting themselves

I have the following in a Section:
_favElement = new StyledStringElement (string.Empty);
_favElement.Alignment = UITextAlignment.Center;
if (_room.IsFavourite) {
_favElement.Image = UIImage.FromBundle ("Images/thumbs_up.png");
_favElement.Caption = "Unmark as Favourite";
} else {
_favElement.Image = null;
_favElement.Caption = "Mark as Favourite";
}
_favElement.Tapped += favElement_Tapped;
Then when I press the element I want the following to happen:
private void favElement_Tapped ()
{
if (_room.IsFavourite) {
_favElement.Image = null;
_favElement.Caption = "Mark as Favourite";
} else {
_favElement.Image = UIImage.FromBundle ("Images/thumbs_up.png");
_favElement.Caption = "Unmark as Favourite";
}
_room.IsFavourite = !_room.IsFavourite;
}
However the image and text does not change in the actual element when the element is tapped. Is there a refresh method or something that must be called? I've also tried changing the Accessory on Tapped as well and nothing changes. The properties behind do reflect the correct values though.
An alternative to reloading the UITableView is to reload the Element using code like this (copied from Touch.Unit):
if (GetContainerTableView () != null) {
var root = GetImmediateRootElement ();
root.Reload (this, UITableViewRowAnimation.Fade);
}
assuming that your code is in DialogViewController,add this
this.ReloadData();
but in your case I recommend you to use BooleanImageElement

How to get the tab ID from url in DotNetNuke

I have an url (e.g. http://localhost/Aanbod/Pagina.aspx) and I want to know the tab id, so I can make a friendly url with query (e.g. http://localhost/Aanbod/Pagina/QueryKey/QueryValue/).
Anyone has an idea?
Edit:
I'm not on the page itself. Want to know it from any page possible.
The url does not contain the tab id itself, so it can't be extracted.
if Pagina.aspx is a page in dotnet nuke like Home or Getting Started then you can find the tab id by
DotNetNuke.Entities.Tabs.TabController objTab = new DotNetNuke.Entities.Tabs.TabController();
DotNetNuke.Entities.Tabs.TabInfo objTabinfo = objTab.GetTabByName("Pagina", this.PortalId);
int Tabid = objTabinfo.TabID;
Well, this post is a little bit old, and I don't know if someone still looks for a solution. I had this problem recently and here is the pieces of code I wrote to solve it:
public int GetTabIDFromUrl(string url, int portalID)
{
int getTabIDFromUrl = 0;
// Try the "old" way with the TabID query string
if (url.ToLower().IndexOf("tabid") > 0)
{
Int32.TryParse(Regex.Match(url, "tabid[=/](\\d+)", RegexOptions.IgnoreCase).Groups[1].Value, out getTabIDFromUrl);
}
// When there is no result (because of advanced or human friendly or whatever Url provider)
if (getTabIDFromUrl == 0)
{
TabCollection tabs = TabController.Instance.GetTabsByPortal(portalID);
foreach (KeyValuePair<int, TabInfo> k in tabs)
{
TabInfo tab = k.Value;
if (tab.FullUrl.StartsWith(url))
{
getTabIDFromUrl = tab.TabID;
break;
}
}
}
return getTabIDFromUrl;
}
This could be a pain with sites that have a lot of pages, therefore it could be useful if you have some additional information to shrink the list that you have to loop through - e.g. a ModuleId of a module that is placed on this tab:
public int GetTabIDFromUrl(string url, int moduleID, int portalID)
{
int getTabIDFromUrl = 0;
// Try the "old" way with the TabID query string
if (url.ToLower().IndexOf("tabid") > 0)
{
Int32.TryParse(Regex.Match(url, "tabid[=/](\\d+)", RegexOptions.IgnoreCase).Groups[1].Value, out getTabIDFromUrl);
}
// When there is no result (because of advanced or human friendly or whatever Url provider)
if (getTabIDFromUrl == 0)
{
IList<ModuleInfo> modules = ModuleController.Instance.GetTabModulesByModule(moduleID);
foreach (ModuleInfo module in modules)
{
TabInfo tab = TabController.Instance.GetTab(module.TabID, portalID);
if (tab.FullUrl.StartsWith(url))
{
getTabIDFromUrl = tab.TabID;
break;
}
}
}
return getTabIDFromUrl;
}
Hope that helps someone...
Happy DNNing!
Michael
I hope this will solve your issue
http://www.willstrohl.com/Blog/EntryId/66/HOW-TO-Get-DNN-TabInfo-page-object-from-TabId
Sorry, my bad!!
Here is your answer
http://www.dotnetnuke.com/Resources/Forums/forumid/118/threadid/89605/scope/posts.aspx :)

Resources