cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Mark3A
Frequent Visitor

Is there any way to revert changes in Portal Studio?

Hello, Im quite new to portal powerapps, I added image in the section and added each one with links, and I know the studio will modify my codes when you enter save. I mistakenly change also the header which messed up the code, is there anyway to revert the change to save time? resetting the portal would also delete the resource so I would like to avoid that

1 ACCEPTED SOLUTION

Accepted Solutions

Hi @Mark3A , 

 

 PFB Header default web template for your reference 

 

 

{% assign defaultlang = settings['LanguageLocale/Code'] | default: 'en-us' %}
{% assign homeurl = website.adx_partialurl %}
<div class="navbar navbar-inverse navbar-static-top my-custom" role="navigation">
  <div class="container">
    <div class="navbar-header">

      <!--div class="visible-xs-block">
        {% editable snippets 'Mobile Header' type: 'html' %}
      </div-->
      <div class="visible-sm-block visible-md-block visible-lg-block visible-xs-block navbar-brand">
        {% editable snippets 'Mobile Header' type: 'html' %}
      </div>
      <button type="button" class="navbar-toggle collapsed" title="{{ snippets["Header/Toggle Navigation"] | default: resx['Toggle_Navigation'] | h }}" data-toggle="collapse" data-target="#navbar" aria-expanded="false" onclick="setHeight();">
        <span class="sr-only">{{ snippets["Header/Toggle Navigation"] | default: resx['Toggle_Navigation'] | h }}</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
    </div>
    <div id="navbar" class="navbar-collapse collapse">
      {% assign primary_nav = weblinks["Default"] %}
      {% if primary_nav %}
      <div class="navbar-right menu-bar {% if primary_nav.editable %}xrm-entity xrm-editable-adx_weblinkset{% endif %}" data-weblinks-maxdepth="2">
        <ul class="nav navbar-nav weblinks" role="menubar">
          {% for link in primary_nav.weblinks %}
          {% unless forloop.first %}
          <li class="divider-vertical" aria-hidden="true"></li>
          {% endunless %}
          {% if link.display_page_child_links %}
          {% if link.url != null %}
          {% assign sublinks = sitemap[link.url].children %}
          {% endif %}
          {% else %}
          {% assign sublinks = link.weblinks %}
          {% endif %}
          <li role="none" class="weblink {% if sublinks.size > 0 %} dropdown{% endif %}">
            <a role="menuitem" aria-label="{{ link.name | escape }}" {% if sublinks.size > 0 -%} href="#" class="dropdown-toggle" data-toggle="dropdown" {%- else -%} href="{{ link.url | escape }}" {%- endif -%} {%- if link.Open_In_New_Window %} target="_blank" {% endif -%} {%- if link.nofollow %} rel="nofollow" {% endif -%} {%- if link.tooltip %} title="{{ link.tooltip | escape }}" {% endif %}>
              {%- if link.image -%}
              {%- if link.image.url  -%}
              {%- if link.image.url.first == '.' -%}
              <span class="{{ link.image.url | split:'.' | join }}" aria-hidden="true"></span>
              {%- endif -%}
              {%- else -%}
              <img src="{{ link.image.url | escape }}" class="my-custom" alt="{{ link.image.alternate_text | default:link.tooltip | escape }}" {% if link.image.width %}width="{{ link.image.width | escape }}" {% endif %} {% if link.image.height %}height="{{ link.image.height | escape }}" {% endif %} />
              {%- endif -%}
              {%- endif -%}
              {%- unless link.display_image_only -%}
              {{ link.name | escape }}
              {%- endunless -%}
              {%- if sublinks.size > 0 -%}
              <span class="caret"></span>
              {%- endif -%}
            </a>
            {% if sublinks.size > 0 %}
            <ul class="dropdown-menu" role="menu">
              {% if link.name %}
              <li role="none">
                <a role="menuitem" aria-label="{{ link.name | escape }}" href="{{ link.url }}" {% if link.Open_In_New_Window %} target="_blank" {% endif %} {% if link.nofollow %}rel="nofollow" {% endif %} {% if link.tooltip %}title="{{ link.tooltip | escape }}" {% endif %}>{{ link.name | escape }}</a>
              </li>
              <div class="divider"></div>
              {% endif %}
              {% for sublink in sublinks %}
              <li role="none">
                <a role="menuitem" aria-label="{{ sublink.name | default:sublink.title | escape }}" href="{{ sublink.url }}" {% if sublink.Open_In_New_Window %} target="_blank" {% endif %} {% if sublink.nofollow %}rel="nofollow" {% endif %} {% if sublink.tooltip %}title="{{ sublink.tooltip | escape }}" {% endif %}>
                  {{ sublink.name | default:sublink.title | escape }}
                </a>
              </li>
              {% endfor %}
            </ul>
            {% endif %}
          </li>
          {% endfor %}
          {% assign search_enabled = settings['Search/Enabled'] | boolean | default:true %}
          {% if search_enabled %}
          <li class="divider-vertical" aria-hidden="true"></li>
          <li role="none" class="dropdown">
            <a id="search" class="navbar-icon" href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" aria-label="{{ snippets["Header/Search/ToolTip"] | default:resx["Search_DefaultText"] | escape }}">
              <span class="glyphicon glyphicon-search"></a>
              </a>
              <ul class="dropdown-menu dropdown-search">
                  {% include 'Search' %}
              </ul>
            </li>
            {% endif %}
            <li class="divider-vertical" aria-hidden="true"></li>
            {% if website.languages.size > 1 %}
              <li class="dropdown" role="none">
                <a class="dropdown-toggle" href="#" data-toggle="dropdown" role="menuitem" aria-label="{{ website.selected_language.name | escape }}" aria-haspopup="true" aria-expanded="false" title="{{ website.selected_language.name | escape }}">
                  <span class="drop_language">{{ website.selected_language.name | escape }}</span>
              <span class="caret"></span>
            </a>
            {% include 'Languages Dropdown' %}
          </li>
          <li class="divider-vertical" aria-hidden="true"></li>
          {% endif %}
          {% if user %}
          <li class="dropdown" role="none">
            <a href="#" class="dropdown-toggle" title="{{ user.fullname | escape }}" data-toggle="dropdown" role="menuitem" aria-haspopup="true" aria-expanded="false">
              <span class="username">{{ user.fullname | escape }}</span>
              <span class="caret"></span>
            </a>
            <ul class="dropdown-menu" role="menu">
              {% assign show_profile_nav = settings["Header/ShowAllProfileNavigationLinks"] | boolean | default:true %}
              {% if show_profile_nav %}
              {% assign profile_nav = weblinks["Profile Navigation"] %}
              {% if profile_nav %}
              {% for link in profile_nav.weblinks %}
              <li role="none">
                <a role="menuitem" aria-label="{{ link.name | escape }}" href="{{ link.url | escape }}" title="{{ link.name | escape }}">{{ link.name | escape }}</a>
              </li>
              {% endfor %}
              {% endif %}
              {% else %}
              <li role="none"><a role="menuitem" aria-label="{{ snippets["Profile Link Text"] | default:resx["Profile_Text"] | escape }}" href="{{ sitemarkers['Profile'].url | escape }}">{{ snippets["Profile Link Text"] | default:resx["Profile_Text"] | escape }}</a></li>
              {% endif %}
              <li class="divider" role="separator" aria-hidden="true"></li>
              <li role="none">
                <a role="menuitem" aria-label="{{ snippets["links/logout"] | default:resx["Sign_Out"] | h | escape }}" href="{% if homeurl%}/{{ homeurl }}{% endif %}{{ website.sign_out_url_substitution }}" title="{{ snippets["links/logout"] | default:resx["Sign_Out"] | h | escape }}">
                  {{ snippets["links/logout"] | default:resx["Sign_Out"] | h | escape }}
                </a>
              </li>
            </ul>
          </li>
          {% else %}
          <li role="none">
            <a role="menuitem" aria-label="{{ snippets["links/login"] | default:resx["Sign_In"] | h | escape }}" href="{% if homeurl%}/{{ homeurl }}{% endif %}{{ website.sign_in_url_substitution }}">
              {{ snippets["links/login"] | default:resx["Sign_In"] | h | escape }}
            </a>
          </li>
          {% endif %}
        </ul>
        {% editable primary_nav %}
      </div>
      {% endif %}
    </div>
  </div>
</div>
{% substitution %}
{% assign current_page = page.id %}
{% assign sr_page = sitemarkers["Search"].id %}
{% assign forum_page = sitemarkers["Forums"].id %}
{% if current_page %}
{% if current_page == sr_page or current_page == forum_page %}
{% assign section_class = "section-landing-search" %}
{% if current_page == forum_page %}
{% assign section_class = "section-landing-forums" %}
{% endif %}
<section class="page_section {{ section_class | h }} color-inverse">
  <div class="row sectionBlockLayout" style="display: flex; flex-wrap: wrap; text-align: center; min-height: 420px; background: url('/Homehero.png'); padding: 8px; margin: 0px;">
    <div class="container" style="display: flex; flex-wrap: wrap;">
      <div class="col-md-12 columnBlockLayout" style="display: flex; flex-direction: column; justify-content: center;">
        {% if current_page == sr_page %}
        <h1>{% editable snippets 'Search/Title' default: resx["Discover_Contoso"] %}</h1>
        {% include 'Search' %}
        {% endif %}
      </div>
    </div>
  </div>
</section>
{% endif %}
{% endif %}
{% endsubstitution %}
<script type="text/javascript">
  window.onload = function() {
    if (window.navigator.appName == "Microsoft Internet Explorer" || window.navigator.userAgent.indexOf("Trident") > 0) {
      var searchElement = document.getElementById("search");
      if (searchElement != null) searchElement.setAttribute("href", "");
    }
  };
  function setHeight() {
    var windowHeight = window.innerHeight - 140;
    var navbar = document.getElementById("navbar");
    if (navbar) {
      navbar.style.maxHeight = windowHeight + "px";
    }
  }
  window.addEventListener('resize', function(event) {
    setHeight();
  });
</script>

 

------------

If you like this post, give a Thumbs up. Where it solved your request, Mark it as a Solution to enable other users find it.

View solution in original post

4 REPLIES 4
ragavanrajan
Super User
Super User

Hi @Mark3A,

 

I am afraid it is not possible. Version control is not yet available for portals. But you can configure using oob. 

Reference: https://arpitmscrmhunt.blogspot.com/2021/05/powerapps-portals-build-tools-azure.html

 

There are more articles in his blog. Pls check.

Additional, the best practice is to play around in your dev environment and move to test/production environment.

------------

If you like this post, give a Thumbs up. Where it solved your request, Mark it as a Solution to enable other users find it.

 

 

 

 

 

 

is there any default header web template code that portal powerapps forums provides so I can copy and modify, my client really liked the default style?

Hi @Mark3A , 

 

 PFB Header default web template for your reference 

 

 

{% assign defaultlang = settings['LanguageLocale/Code'] | default: 'en-us' %}
{% assign homeurl = website.adx_partialurl %}
<div class="navbar navbar-inverse navbar-static-top my-custom" role="navigation">
  <div class="container">
    <div class="navbar-header">

      <!--div class="visible-xs-block">
        {% editable snippets 'Mobile Header' type: 'html' %}
      </div-->
      <div class="visible-sm-block visible-md-block visible-lg-block visible-xs-block navbar-brand">
        {% editable snippets 'Mobile Header' type: 'html' %}
      </div>
      <button type="button" class="navbar-toggle collapsed" title="{{ snippets["Header/Toggle Navigation"] | default: resx['Toggle_Navigation'] | h }}" data-toggle="collapse" data-target="#navbar" aria-expanded="false" onclick="setHeight();">
        <span class="sr-only">{{ snippets["Header/Toggle Navigation"] | default: resx['Toggle_Navigation'] | h }}</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
    </div>
    <div id="navbar" class="navbar-collapse collapse">
      {% assign primary_nav = weblinks["Default"] %}
      {% if primary_nav %}
      <div class="navbar-right menu-bar {% if primary_nav.editable %}xrm-entity xrm-editable-adx_weblinkset{% endif %}" data-weblinks-maxdepth="2">
        <ul class="nav navbar-nav weblinks" role="menubar">
          {% for link in primary_nav.weblinks %}
          {% unless forloop.first %}
          <li class="divider-vertical" aria-hidden="true"></li>
          {% endunless %}
          {% if link.display_page_child_links %}
          {% if link.url != null %}
          {% assign sublinks = sitemap[link.url].children %}
          {% endif %}
          {% else %}
          {% assign sublinks = link.weblinks %}
          {% endif %}
          <li role="none" class="weblink {% if sublinks.size > 0 %} dropdown{% endif %}">
            <a role="menuitem" aria-label="{{ link.name | escape }}" {% if sublinks.size > 0 -%} href="#" class="dropdown-toggle" data-toggle="dropdown" {%- else -%} href="{{ link.url | escape }}" {%- endif -%} {%- if link.Open_In_New_Window %} target="_blank" {% endif -%} {%- if link.nofollow %} rel="nofollow" {% endif -%} {%- if link.tooltip %} title="{{ link.tooltip | escape }}" {% endif %}>
              {%- if link.image -%}
              {%- if link.image.url  -%}
              {%- if link.image.url.first == '.' -%}
              <span class="{{ link.image.url | split:'.' | join }}" aria-hidden="true"></span>
              {%- endif -%}
              {%- else -%}
              <img src="{{ link.image.url | escape }}" class="my-custom" alt="{{ link.image.alternate_text | default:link.tooltip | escape }}" {% if link.image.width %}width="{{ link.image.width | escape }}" {% endif %} {% if link.image.height %}height="{{ link.image.height | escape }}" {% endif %} />
              {%- endif -%}
              {%- endif -%}
              {%- unless link.display_image_only -%}
              {{ link.name | escape }}
              {%- endunless -%}
              {%- if sublinks.size > 0 -%}
              <span class="caret"></span>
              {%- endif -%}
            </a>
            {% if sublinks.size > 0 %}
            <ul class="dropdown-menu" role="menu">
              {% if link.name %}
              <li role="none">
                <a role="menuitem" aria-label="{{ link.name | escape }}" href="{{ link.url }}" {% if link.Open_In_New_Window %} target="_blank" {% endif %} {% if link.nofollow %}rel="nofollow" {% endif %} {% if link.tooltip %}title="{{ link.tooltip | escape }}" {% endif %}>{{ link.name | escape }}</a>
              </li>
              <div class="divider"></div>
              {% endif %}
              {% for sublink in sublinks %}
              <li role="none">
                <a role="menuitem" aria-label="{{ sublink.name | default:sublink.title | escape }}" href="{{ sublink.url }}" {% if sublink.Open_In_New_Window %} target="_blank" {% endif %} {% if sublink.nofollow %}rel="nofollow" {% endif %} {% if sublink.tooltip %}title="{{ sublink.tooltip | escape }}" {% endif %}>
                  {{ sublink.name | default:sublink.title | escape }}
                </a>
              </li>
              {% endfor %}
            </ul>
            {% endif %}
          </li>
          {% endfor %}
          {% assign search_enabled = settings['Search/Enabled'] | boolean | default:true %}
          {% if search_enabled %}
          <li class="divider-vertical" aria-hidden="true"></li>
          <li role="none" class="dropdown">
            <a id="search" class="navbar-icon" href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" aria-label="{{ snippets["Header/Search/ToolTip"] | default:resx["Search_DefaultText"] | escape }}">
              <span class="glyphicon glyphicon-search"></a>
              </a>
              <ul class="dropdown-menu dropdown-search">
                  {% include 'Search' %}
              </ul>
            </li>
            {% endif %}
            <li class="divider-vertical" aria-hidden="true"></li>
            {% if website.languages.size > 1 %}
              <li class="dropdown" role="none">
                <a class="dropdown-toggle" href="#" data-toggle="dropdown" role="menuitem" aria-label="{{ website.selected_language.name | escape }}" aria-haspopup="true" aria-expanded="false" title="{{ website.selected_language.name | escape }}">
                  <span class="drop_language">{{ website.selected_language.name | escape }}</span>
              <span class="caret"></span>
            </a>
            {% include 'Languages Dropdown' %}
          </li>
          <li class="divider-vertical" aria-hidden="true"></li>
          {% endif %}
          {% if user %}
          <li class="dropdown" role="none">
            <a href="#" class="dropdown-toggle" title="{{ user.fullname | escape }}" data-toggle="dropdown" role="menuitem" aria-haspopup="true" aria-expanded="false">
              <span class="username">{{ user.fullname | escape }}</span>
              <span class="caret"></span>
            </a>
            <ul class="dropdown-menu" role="menu">
              {% assign show_profile_nav = settings["Header/ShowAllProfileNavigationLinks"] | boolean | default:true %}
              {% if show_profile_nav %}
              {% assign profile_nav = weblinks["Profile Navigation"] %}
              {% if profile_nav %}
              {% for link in profile_nav.weblinks %}
              <li role="none">
                <a role="menuitem" aria-label="{{ link.name | escape }}" href="{{ link.url | escape }}" title="{{ link.name | escape }}">{{ link.name | escape }}</a>
              </li>
              {% endfor %}
              {% endif %}
              {% else %}
              <li role="none"><a role="menuitem" aria-label="{{ snippets["Profile Link Text"] | default:resx["Profile_Text"] | escape }}" href="{{ sitemarkers['Profile'].url | escape }}">{{ snippets["Profile Link Text"] | default:resx["Profile_Text"] | escape }}</a></li>
              {% endif %}
              <li class="divider" role="separator" aria-hidden="true"></li>
              <li role="none">
                <a role="menuitem" aria-label="{{ snippets["links/logout"] | default:resx["Sign_Out"] | h | escape }}" href="{% if homeurl%}/{{ homeurl }}{% endif %}{{ website.sign_out_url_substitution }}" title="{{ snippets["links/logout"] | default:resx["Sign_Out"] | h | escape }}">
                  {{ snippets["links/logout"] | default:resx["Sign_Out"] | h | escape }}
                </a>
              </li>
            </ul>
          </li>
          {% else %}
          <li role="none">
            <a role="menuitem" aria-label="{{ snippets["links/login"] | default:resx["Sign_In"] | h | escape }}" href="{% if homeurl%}/{{ homeurl }}{% endif %}{{ website.sign_in_url_substitution }}">
              {{ snippets["links/login"] | default:resx["Sign_In"] | h | escape }}
            </a>
          </li>
          {% endif %}
        </ul>
        {% editable primary_nav %}
      </div>
      {% endif %}
    </div>
  </div>
</div>
{% substitution %}
{% assign current_page = page.id %}
{% assign sr_page = sitemarkers["Search"].id %}
{% assign forum_page = sitemarkers["Forums"].id %}
{% if current_page %}
{% if current_page == sr_page or current_page == forum_page %}
{% assign section_class = "section-landing-search" %}
{% if current_page == forum_page %}
{% assign section_class = "section-landing-forums" %}
{% endif %}
<section class="page_section {{ section_class | h }} color-inverse">
  <div class="row sectionBlockLayout" style="display: flex; flex-wrap: wrap; text-align: center; min-height: 420px; background: url('/Homehero.png'); padding: 8px; margin: 0px;">
    <div class="container" style="display: flex; flex-wrap: wrap;">
      <div class="col-md-12 columnBlockLayout" style="display: flex; flex-direction: column; justify-content: center;">
        {% if current_page == sr_page %}
        <h1>{% editable snippets 'Search/Title' default: resx["Discover_Contoso"] %}</h1>
        {% include 'Search' %}
        {% endif %}
      </div>
    </div>
  </div>
</section>
{% endif %}
{% endif %}
{% endsubstitution %}
<script type="text/javascript">
  window.onload = function() {
    if (window.navigator.appName == "Microsoft Internet Explorer" || window.navigator.userAgent.indexOf("Trident") > 0) {
      var searchElement = document.getElementById("search");
      if (searchElement != null) searchElement.setAttribute("href", "");
    }
  };
  function setHeight() {
    var windowHeight = window.innerHeight - 140;
    var navbar = document.getElementById("navbar");
    if (navbar) {
      navbar.style.maxHeight = windowHeight + "px";
    }
  }
  window.addEventListener('resize', function(event) {
    setHeight();
  });
</script>

 

------------

If you like this post, give a Thumbs up. Where it solved your request, Mark it as a Solution to enable other users find it.

you my friend are a life saver, I can finish my work today thanks

Helpful resources

Announcements
Ignite 2022

WHAT’S NEXT AT MICROSOFT IGNITE 2022

Explore the latest innovations, learn from product experts and partners, level up your skillset, and create connections from around the world.

Users online (1,681)