2014-01-09 3 views
1

Наша команда построила собственный портлет для загрузки маркеров Google на карту. Маркеры создаются в скрипте шаблона. Теперь мы хотим отобразить эти маркеры в другом издателе активов в списке, таком как формат. Есть ли в любом случае переход условного файла шаблона в зависимости от портлета, который его запрашивает? Или, альтернативно, есть ли хорошие методы для создания этого кода в jsp, а не в файле шаблона?Как построить условный условный портлет в liferay

//code that creates the markers on the full map 
gmarker=new google.maps.Marker({position:new google.maps.LatLng("$Lattitude.getData()","$Longitude.getData()"),title:"$reserved-article-title.getData()",icon:gicon,map:map}); 
if(window.location.href.indexOf("fullmap") > -1) { 
    google.maps.event.addListener(gmarker, 'click', function() { 
     new google.maps.InfoWindow({content: 
      '<div id="node_content"> 
       <div id="siteNotice"></div> 
       <h3 id="firstHeading" class="firstHeading">$reserved-article-title.getData(), $City.getData(), $Country.getData()</h3> 
       <hr class="m_spacer"/> 
       <div id="bodyContent"> 
        <p class="gdes">$Description.getData()</p> 
        <img class="m_image" src="$Image.getData()"/> 
       </div> 
      </div>' 
     }).open(map,this); 
    }); 
} 
gmarker.setMap(map); 
//redirect code that opens the infowindow on load if the id paramater is not null 
if(flag==true){new google.maps.InfoWindow({content: 
    '<div id="node_content" class="gs2"> 
     <div id="siteNotice"></div> 
     <h3 id="firstHeading" class="firstHeading">$reserved-article-title.getData(), $City.getData(), $Country.getData()</h3> 
     <hr class="m_spacer"/> 
     <div id="bodyContent"> 
      <p class="gdes">$Description.getData()</p> 
      <img class="m_image" src="$Image.getData()"/> 
     </div> 
    </div>'}).open(map,gmarker); 
    flag=false; 
} 

Это liferay 6.1, поэтому мы не можем наслаждаться роскошью последнего релиза. Here - это снимок экрана из двух портлетов и то, что они отображают, а также пример того, к чему мы стремимся. Веб-сайт, который очень похож на то, что мы пытаемся найти, можно найти here. Мы надеялись на концептуальные идеи о том, как обязательно дифференцировать портлеты, а не код. Ваша помощь очень ценится.

+0

Если мы не сможем найти решение этого вопроса, нам придется прибегнуть к созданию двух ресурсов веб-контента для каждого экземпляра. Это было бы очень сложно управлять и было бы последним вариантом. – coltonfranco

ответ

0

Если вы хотите использовать ту же функцию JavaScript из различных портлетов, то лучший способ это поставить функцию JavaScript на тему

http://www.liferay.com/documentation/liferay-portal/6.2/development/-/ai/creating-themes-and-layout-templates-liferay-portal-6-2-dev-guide-09-en

и вызвать функцию из портлета-JSP с различными свойства.

+0

Мы пытаемся запретить выполнение функций java-script в других портлетах. Есть ли способ, которым код можно поместить в jsp и поддерживать функциональность? – coltonfranco

+0

Я не могу понять, что вы имеете в виду :(Если вы хотите отобразить карту в двух разных местах с разными форматами - тогда желательно, чтобы функция (Google-Map - это JavaScript API) была центральной, как тема Liferay, и называет ее портлет или веб-контент или все остальное. – Mark

0

Я не уверен, правильно ли я понял ваш вопрос, но подумал ли вы о создании пользовательского стиля отображения для своего издателя активов для достижения этого? Если нет, проверьте это: http://www.rotterdam-cs.com/blogs/-/blogs/hooking-the-asset-publisher-for-custom-display-styles

Вы можете создать новый стиль отображения с помощью своей карты сверху и списка ниже, всего в одном jsp (если вы не сломаете его). Я думаю, что это, возможно, решит вашу проблему.

Смежные вопросы