Problem Customising the user edit page

Author Message

Joe Wolf

Tuesday 31 August 2004 12:19:59 pm

I am trying to create my own user edit page, and in order to do that I need to be able to use the "attribute_edit_gui" whilst supplying the default value.

I have been able to do this successfully using

{let user=fetch( 'user', 'current_user' )}

<input type="text" name="ContentObjectAttribute_data_user_login_{$content_attributes[3].id}" class="InputRed" style="width:100%;" value="{$user.contentobject.data_map.user_account.content.login}" />

{/let}

but how could I do it if I've created my own class datatypes?

eg first_name

<input type="text" name="WHAT SHOULD GO HERE?" class="InputRed" style="width:100%;" value="{$user.contentobject.data_map.first_name.data_text}" />

Thanks in advance for any help

Eivind Marienborg

Friday 03 September 2004 12:51:10 am

I'm not sure about what you're trying to acheive, but here's how I create my custom edit-pages.

You need to create an override for content/edit.tpl (the main edit page), and content/edit_attribute.tpl (the template handling each line/input field).

Modify your content/edit.tpl-override:
Create a CSS-class hiding the validation and placement bar at the top (this seems to be needed by eZ), and comment out the "right part" in your template.

Here's my working code for the altered parts:

<div class="noshow">
    {include uri="design:content/edit_validation.tpl"}

    {include uri="design:edit_placement_user.tpl"}
    <br/>
</div>
{*
    <!-- Right part start-->
    {include uri="design:content/edit_right_menu.tpl"}
    <!-- Right part end -->
*}

In order to change the way each input field is outputted (and the entire look and feel of the page), you need to edit the content/edit_attribute.tpl-override. Add a switch matching on the field title, and a case for the ones you want to change, and leave the default in the default case-block.

It might seem troublesome, but it works nicely.

Eivind

Joe Wolf

Friday 03 September 2004 6:18:20 am

Thanks Eivind,

Basically I want to have a fully customised user edit page that doesn't rely on Ez's attribute_edit_gui. This is because I don&acute;t want all forms on the site to look exactly the same. This has meant building my own page lifting code from the edit datatype tpls (e.g. content/datatype/edit/ezstring.tpl)

This means that my edit.tpl looks looks this:

<form enctype="multipart/form-data" name="Edit" method="post" action={concat("/user/edit/", $current_user.contentobject_id,"/",$current_user.contentobject.current_version)|ezurl}>
        <tr class="FormRow"> 
          <td width="130" class="TxtFormDescription"> {'Title'|i18n('justlanded')} 
          </td>
          <td> 
		  <table cellpadding="0" cellspacing="0" width="100%">
              <tr> 
                <td class="TxtForm"> 
			  	{section name=title loop=$user.data_map.title.content.enum_list}
					<input type="hidden" name="ContentObjectAttribute_data_enumid_{$current_user.contentobject.data_map.title.id}[]" value="{$title:item.id}" />
					<input type="hidden" name="ContentObjectAttribute_data_enumvalue_{$current_user.contentobject.data_map.title.id}[]" value="{$title:item.enumvalue}" />  
					<input type="hidden" name="ContentObjectAttribute_data_enumelement_{$current_user.contentobject.data_map.title.id}[]" value="{$title:item.enumelement}" />
					<input type="radio" name="ContentObjectAttribute_select_data_enumelement_{$current_user.contentobject.data_map.title.id}[]" value="{$title:item.enumelement}" 
				  	{section name=current_title loop=$current_user.contentobject.data_map.title.content.enumobject_list}
				  	{switch match=$title:item.enumelement}
						{case match=$title:current_title:item.enumelement}
				   		checked
						{/case}
						{case}
						{/case}
				  	{/switch}					
				 	{/section}
					/> {$title:item.enumelement}
				 {/section}
				 </td>
              </tr>
			</table>  
            </td>
        </tr>
        <tr class="FormRow"> 
          <td width="130" class="TxtFormDescription"> {'First name'|i18n('justlanded')} 
          </td>
          <td> 
		  <table cellpadding="0" cellspacing="0" width="100%">
              <tr> 
                <td class="TxtForm">
				<input type="hidden" name="ContentObjectAttribute_id[]" value="{$current_user.contentobject.data_map.first_name.id}" />
				<input type="text" class="InputRed" name="ContentObjectAttribute_ezstring_data_text_{$current_user.contentobject.data_map.first_name.id}" style="width:100%;" value="{$current_user.contentobject.data_map.first_name.data_text}"> 
                </td>
              </tr>
            </td>
          </table>
		</tr>
        <tr class="FormRow"> 
          <td width="130" class="TxtFormDescription"> {'Surname'|i18n('justlanded')} 
          </td>
          <td> 
		  <table cellpadding="0" cellspacing="0" width="100%">
              <tr> 
                <td class="TxtForm">
				<input type="hidden" name="ContentObjectAttribute_id[]" value="{$current_user.contentobject.data_map.sur_name.id}" />
				<input type="text" class="InputRed" name="ContentObjectAttribute_ezstring_data_text_{$current_user.contentobject.data_map.sur_name.id}" style="width:100%;" value="{$current_user.contentobject.data_map.sur_name.data_text}"> 
                </td>
              </tr>
            </td>
		  </table>
        </tr>
        <tr class="FormRow"> 
          <td width="130" class="TxtFormDescription"> {'Email'|i18n('justlanded')} 
          </td>
          <td> 
		  <table cellpadding="0" cellspacing="0" width="100%">
              <tr> 
                <td class="TxtForm">
				<input type="hidden" name="ContentObjectAttribute_id[]" value="{$current_user.contentobject.data_map.user_account.content.email.id}" />  
				<input type="text" class="InputRed" name="ContentObjectAttribute_data_user_email_{$current_user.contentobject.data_map.user_account.content.email.id}" style="width:100%;" value="{$current_user.contentobject.data_map.user_account.content.email}">                
				</td>
              </tr>
		  </table>  
          </td>
        </tr>
        <tr class="FormRow"> 
          <td width="130" class="TxtFormDescription"> {'User name'|i18n('justlanded')} 
          </td>
          <td> 
		  <table cellpadding="0" cellspacing="0" width="100%">
              <tr> 
                <td class="TxtForm">
				<input type="hidden" name="ContentObjectAttribute_id[]" value="{$current_user.contentobject.data_map.user_account.content.login.id}" />
				<input type="text" class="InputRed" name="ContentObjectAttribute_data_user_login_{$current_user.contentobject.data_map.user_account.content.login.id}" style="width:100%;" value="{$current_user.contentobject.data_map.user_account.content.login}">
                </td>
              </tr>
          </table>
		  </td>
        </tr>
      </table>
	  </td>
  </tr>
  <tr> 
    <td height="12"><img src={"blind.gif"|ezimage} width=1 height=12 alt="" border="0"></td>
  </tr>
  <tr> 
    <td> 
      <!--country details-->
      <table class="FormBg" width="100%" border="0">
        <tr class="FormRow"> 
          <td width="180" class="TxtFormDescription""> {'Your Home Country'|i18n('justlanded')}? 
          </td>
          <td> 
		  <table cellpadding="0" cellspacing="0" width="100%">
              <tr> 
                <td class="TxtForm">
				<input type="hidden" name="ContentObjectAttribute_id[]" value="{$current_user.contentobject.data_map.country.id}" />
				<select class="box" name="ContentObjectAttribute_ezcountry_data_text_{$current_user.contentobject.data_map.country.id}" value="{$current_user.contentobject.data_map.country.data_text}">
				{include selected_option=$current_user.contentobject.data_map.country.data_text uri='design/standard/templates/content/datatype/edit/ezcountry_options.tpl' name='country_options'}
				</select>  
                </td>
              </tr>
            </table></td>
        </tr>
        <tr class="FormRow"> 
          <td width="180" class="TxtFormDescription"> {'Your Just Landed Country'|i18n('justlanded')}? 
          </td>
          <td> 
		  <table cellpadding="0" cellspacing="0" width="100%">
              <tr> 
                <td class="TxtForm">
				<input type="hidden" name="ContentObjectAttribute_id[]" value="{$current_user.contentobject.data_map.jlcountry.id}" />
				<select class="box" name="ContentObjectAttribute_ezcountry_data_text_{$current_user.contentobject.data_map.jlcountry.id}" value="{$current_user.contentobject.data_map.jlcountry.data_text}">
				{include selected_option=$current_user.contentobject.data_map.jlcountry.data_text uri='design/standard/templates/content/datatype/edit/ezcountry_options.tpl' name='country_options'}
				</select>  
                </td> 
                </td>
              </tr>
            </table>
			</td>
        </tr>
      </table></td>
  </tr>
  <tr> 
    <td height="12"><img src={"blind.gif"|ezimage} width=1 height=12 alt="" border="0"></td>
  </tr>
  <tr> 
    <td> 
      <!--age-->
      <table class="FormBg" width="100%" border="0">
        <tr class="FormRow"> 
          <td class="TxtFormHeadline"> {'Age'|i18n('justlanded')}? 
          </td>
        </tr>
        <tr> 
          <td class="TxtForm">
		  {section name=age loop=$user.data_map.age.content.enum_list}
				<input type="hidden" name="ContentObjectAttribute_data_enumid_{$current_user.contentobject.data_map.age.id}[]" value="{$age:item.id}" />
				<input type="hidden" name="ContentObjectAttribute_data_enumvalue_{$current_user.contentobject.data_map.age.id}[]" value="{$age:item.enumvalue}" />  
				<input type="hidden" name="ContentObjectAttribute_data_enumelement_{$current_user.contentobject.data_map.age.id}[]" value="{$age:item.enumelement}" />
				<input type="radio" name="ContentObjectAttribute_select_data_enumelement_{$current_user.contentobject.data_map.age.id}[]" value="{$age:item.enumelement}" 
				{section name=current_age loop=$current_user.contentobject.data_map.age.content.enumobject_list}
					{switch match=$age:item.enumelement}
						{case match=$age:current_age:item.enumelement}
				   		checked
						{/case}
				  	{/switch}
				 {/section}
				  /> {$age:item.enumelement}
			{/section}
		  </td>
        </tr>
        <!--occupation-->
        <tr class="FormRow"> 
          <td class="TxtFormHeadline"> {'Occupation'|i18n('justlanded')}? 
          </td>
        </tr>
        <tr> 
          <td class="TxtForm">
		  {section name=occupation loop=$user.data_map.occupation.content.enum_list}
				<input type="hidden" name="ContentObjectAttribute_data_enumid_{$current_user.contentobject.data_map.occupation.id}[]" value="{$occupation:item.id}" />
				<input type="hidden" name="ContentObjectAttribute_data_enumvalue_{$current_user.contentobject.data_map.occupation.id}[]" value="{$occupation:item.enumvalue}" />  
				<input type="hidden" name="ContentObjectAttribute_data_enumelement_{$current_user.contentobject.data_map.occupation.id}[]" value="{$occupation:item.enumelement}" />
				<input type="radio" name="ContentObjectAttribute_select_data_enumelement_{$current_user.contentobject.data_map.occupation.id}[]" value="{$occupation:item.enumelement}" 
				{section name=current_occupation loop=$current_user.contentobject.data_map.occupation.content.enumobject_list}
					{switch match=$occupation:item.enumelement}
						{case match=$occupation:current_occupation:item.enumelement}
				   		checked
						{/case}
				  	{/switch}
				 {/section}
				  /> {$occupation:item.enumelement}
			{/section}
			</td>
        </tr>
      </table></td>
  </tr>
  <tr> 
    <td colspan="2" height="12"><img src={"blind.gif"|ezimage} width=1 height=12 alt="" border="0"></td>
  </tr>
  <tr> 
    <td> <input type="submit" class="InputButton" name="PublishButton" value="{'Submit'|i18n('design/justlanded/user')}" /> 
      <input type="reset" class="InputButton" name="DiscardButton" value="{'Cancel'|i18n('design/justlanded/user')}" /> 
    </td>
  </tr>
</table>
</form>

This pulls in the users details successfully, but now the problem I have is that when I submit this it doesn't publish, but stays as a draft. Any ideas? I might try doing it your way although I'm just learning PHP and therefore if you could give me an example of how to do the switches for each edit datatype in such a way that I can have different ones for different forms, rather than them all being generic, that would be great.

Joe

Powered by eZ Publish™ CMS Open Source Web Content Management. Copyright © 1999-2014 eZ Systems AS (except where otherwise noted). All rights reserved.

eZ debug

Timing: Jan 31 2025 04:30:25
Script start
Timing: Jan 31 2025 04:30:25
Module start 'layout'
Timing: Jan 31 2025 04:30:25
Module start 'content'
Timing: Jan 31 2025 04:30:25
Module end 'content'
Timing: Jan 31 2025 04:30:25
Script end

Main resources:

Total runtime0.0149 sec
Peak memory usage2,048.0000 KB
Database Queries3

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0059 588.2500151.2266
Module start 'layout' 0.00590.0024 739.476636.6641
Module start 'content' 0.00840.0052 776.1406106.2656
Module end 'content' 0.01360.0013 882.406345.9922
Script end 0.0149  928.3984 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.002516.8064140.0002
Check MTime0.00117.2685140.0001
Mysql Total
Database connection0.00085.427010.0008
Mysqli_queries0.002718.267830.0009
Looping result0.00000.079910.0000
Template Total0.00106.710.0010
Template load0.00074.984610.0007
Template processing0.00031.728110.0003
Override
Cache load0.00053.625410.0005
General
dbfile0.00085.601180.0001
String conversion0.00000.041540.0000
Note: percentages do not add up to 100% because some accumulators overlap

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1print_pagelayout.tpl<No override>extension/community/design/community/templates/print_pagelayout.tplEdit templateOverride template
 Number of times templates used: 1
 Number of unique templates used: 1

Time used to render debug report: 0.0001 secs