<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://atk-framework.com/index.php?action=history&amp;feed=atom&amp;title=Usage_without_DB_I%2FO_%2B_Polymorphism</id>
	<title>Usage without DB I/O + Polymorphism - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://atk-framework.com/index.php?action=history&amp;feed=atom&amp;title=Usage_without_DB_I%2FO_%2B_Polymorphism"/>
	<link rel="alternate" type="text/html" href="https://atk-framework.com/index.php?title=Usage_without_DB_I/O_%2B_Polymorphism&amp;action=history"/>
	<updated>2026-09-20T20:43:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://atk-framework.com/index.php?title=Usage_without_DB_I/O_%2B_Polymorphism&amp;diff=9991&amp;oldid=prev</id>
		<title>BERT: New page: {{howto|Easy|BERT }}  == Intro == If you want to use the power of any attribute without having database I/O involved either in a normal node or maybe in the admin screen, like what the...</title>
		<link rel="alternate" type="text/html" href="https://atk-framework.com/index.php?title=Usage_without_DB_I/O_%2B_Polymorphism&amp;diff=9991&amp;oldid=prev"/>
		<updated>2008-03-25T20:11:48Z</updated>

		<summary type="html">&lt;p&gt;New page: {{howto|Easy|&lt;a href=&quot;/index.php?title=BERT&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;BERT (page does not exist)&quot;&gt;BERT&lt;/a&gt; }}  == Intro == If you want to use the power of any attribute without having database I/O involved either in a normal node or maybe in the admin screen, like what the...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{howto|Easy|[[BERT]] }}&lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
If you want to use the power of any attribute without having database I/O involved either in a normal node or maybe in the admin screen, like what the dummy attribute does.  This how to will help you with that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating a custom attribute without I/O ==&lt;br /&gt;
Create your attribute by extending the one you desire.  In this case I&amp;#039;m extending the list or &amp;#039;dropdown box&amp;#039;.   You then need to change the loadType and storeType to return a value of 0 so it doesn&amp;#039;t interface with the database.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
useattrib(&amp;quot;atklistattribute&amp;quot;);&lt;br /&gt;
class listNoIO extends atkListAttribute&lt;br /&gt;
{&lt;br /&gt;
   function listNoIO($name, $optionArray, $valueArray=&amp;quot;&amp;quot;, $flags=0, $size=0  )&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;atkListAttribute($name, $optionArray, $valueArray, $flags, $size );&lt;br /&gt;
       // this attribute will only be visible in edit screens:&lt;br /&gt;
       $this-&amp;gt;addFlag(AF_HIDE); $this-&amp;gt;removeFlag(AF_HIDE_ADD);&lt;br /&gt;
   }&lt;br /&gt;
   function loadType()&lt;br /&gt;
  {&lt;br /&gt;
   // this makes sure this attribute does not partake in the query that loads&lt;br /&gt;
   // data. Since we aren&amp;#039;t a real relationship, we don&amp;#039;t have anything to load.&lt;br /&gt;
   return 0;&lt;br /&gt;
  } &lt;br /&gt;
   function storageType()&lt;br /&gt;
   {&lt;br /&gt;
      return 0;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using that attribute in your node ==&lt;br /&gt;
Add it to your node.  Upon Saving via the Edit or  Add the $record will contain these values and can be used in places like validate or postUpdate&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 useattrib(&amp;quot;yourmodule.listnoio&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
 class yournode extends atkNode {&lt;br /&gt;
   function yournode () {&lt;br /&gt;
    $attr = &amp;amp;$this-&amp;gt;add(new listNoIO( &amp;quot;adminview&amp;quot;,&lt;br /&gt;
                              array( &amp;quot;All&amp;quot;,&amp;quot;Not_All&amp;quot;) ,&lt;br /&gt;
                              array( &amp;quot;A&amp;quot;,&amp;quot;N&amp;quot;), AF_LIST_NO_NULL_ITEM ));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function postUpdate(&amp;amp;$record) &lt;br /&gt;
     {     &lt;br /&gt;
     if ( $record[&amp;#039;adminview&amp;#039;] == &amp;#039;N&amp;#039; ) {&lt;br /&gt;
        $this-&amp;gt;doSomethingSpecial( $record );&lt;br /&gt;
     }&lt;br /&gt;
     return true;&lt;br /&gt;
   }  &lt;br /&gt;
 } &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using it to polymorphism your admin list ==&lt;br /&gt;
Lets put this list attribute in the Header area and use it to change our columns.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 useattrib(&amp;quot;yourmodule.listnoio&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
 class yournode extends atkNode {&lt;br /&gt;
   function yournode () {&lt;br /&gt;
    GLOBAL $ATK_VARS;&lt;br /&gt;
    // change it to always be hidden&lt;br /&gt;
    $attr = &amp;amp;$this-&amp;gt;add(new listNoIO( &amp;quot;adminview&amp;quot;,&lt;br /&gt;
                              array( &amp;quot;All&amp;quot;,&amp;quot;Not_All&amp;quot;) ,&lt;br /&gt;
                              array( &amp;quot;A&amp;quot;,&amp;quot;N&amp;quot;), AF_HIDE|AF_LIST_NO_NULL_ITEM ));&lt;br /&gt;
&lt;br /&gt;
      // make it happen &amp;#039;onChange&amp;#039; of the value and pass it back the one selected&lt;br /&gt;
      $attr-&amp;gt;addOnChangeHandler( &amp;quot; window.location=&amp;#039;&amp;quot;.str_replace(&amp;quot;&amp;#039;&amp;quot;,&amp;quot;\&amp;#039;&amp;quot;,$_SERVER[&amp;#039;REQUEST_URI&amp;#039;]).&amp;quot;&amp;amp;chgadminview=&amp;#039;+newvalue;&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
      // See if we already have an adminview value set        &lt;br /&gt;
      $session = &amp;amp;atkSessionManager::getSession();&lt;br /&gt;
      $adminView = $session[&amp;#039;adminview&amp;#039;];&lt;br /&gt;
  &lt;br /&gt;
      // check to see if our adminview dropdown was changed&lt;br /&gt;
      if ( isset( $ATK_VARS[&amp;#039;chgadminview&amp;#039;])){      &lt;br /&gt;
           $adminView = $ATK_VARS[&amp;#039;chgadminview&amp;#039;] ;           &lt;br /&gt;
           // save our admin value on our session stack so we can reference it when we&lt;br /&gt;
           // come back to the admin screen&lt;br /&gt;
           $session[&amp;#039;adminview&amp;#039;] = $adminView;    &lt;br /&gt;
      }             &lt;br /&gt;
      &lt;br /&gt;
      if ( isset($adminView) &amp;amp;&amp;amp; $ATK_VARS[&amp;#039;atkaction&amp;#039;] == &amp;#039;admin&amp;#039; ) {   &lt;br /&gt;
          $attr-&amp;gt;setSelected( $adminView );   // set the selected one as default&lt;br /&gt;
           if    ( $adminView == &amp;#039;N&amp;#039; ) {&lt;br /&gt;
               // lets say we have 2 attributes which are normally not on the &lt;br /&gt;
               // admin screen and we want to put them there&lt;br /&gt;
              foreach ( array(&amp;#039;Attr1&amp;#039;,&amp;#039;Attr2&amp;#039;) as $var ) {&lt;br /&gt;
                $attr = &amp;amp;$this-&amp;gt;getAttribute( $var );&lt;br /&gt;
                $attr-&amp;gt;removeFlag( AF_HIDE_LIST );&lt;br /&gt;
              }&lt;br /&gt;
               &lt;br /&gt;
           } &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // put the attribute in the Header area&lt;br /&gt;
 function adminHeader(){&lt;br /&gt;
       // setup adminview list box for viewing just finals or final 4   &lt;br /&gt;
       $attr=&amp;amp;$this-&amp;gt;getAttribute(&amp;quot;adminview&amp;quot;);              &lt;br /&gt;
       // please note: $rec is blank here&lt;br /&gt;
       $help_text =  &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot;&amp;gt;&amp;#039;.&amp;quot;VIEW: &amp;quot;.$attr-&amp;gt;edit( $rec, &amp;#039;edit&amp;#039;) . &amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;;&lt;br /&gt;
   return $help_text;&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>BERT</name></author>
	</entry>
</feed>