This question has been answered by breezer. See the first response.
include MODX_BASE_PATH.'assets/plugins/tabs/tab.plugin.php';
<?php /* tabs.plugin.php */ /* Copy / paste the following into the SQL tab in phpMyAdmin to create the sample table Change the {PREFIX} part to match your setup CREATE TABLE IF NOT EXISTS `{PREFIX}tabs_demo` ( `id` int(10) NOT NULL auto_increment, `name` varchar(50) NOT NULL default '', `docid` integer NOT NULL DEFAULT '0' COMMENT '', `content` mediumtext, PRIMARY KEY (`id`) ) ENGINE=MyISAM COMMENT=''; */ // name of the table which holds your data, without any prefix $table_name ='tabs_demo'; $tab_tpl =' <!-- tab create --> <div class="tab-page" id="tab[+tab_title+]"> <!-- tab title --> <h2 class="tab">[+tab_title+]</h2> <script type="text/javascript">tpSettings.addTabPage( document.getElementById( "tab[+tab_title+]" ) );</script> <!-- tab content --> <div class="sectionHeader" id="[+tab_title+]_header">[+tab_heading+]</div> <div class="sectionBody"> [+tab_content+] </div> <!-- end tab content --> </div> <!-- close tab --> '; $e = &$modx->Event; $output =''; switch ($e->name) { case 'OnDocFormRender': /*====== copy this entire block to add a new tab ======*/ // modify the settings below for each tab $item_name ='EXAMPLE'; $tab_title ='Tab Title'; $tab_heading ='Tab Heading'; $tab_content =' <div style="width:100%"> <textarea id="[+item_name+]" name="[+item_name+]" style="width:100%; height:200px;" onchange="documentDirty=true;">[+field_content+]</textarea> <input type="hidden" name="[+item_name+]_NAME" value="[+hidden_item_name+]"> <input type="hidden" name="[+item_name+]_ID" value="[+hidden_item_id+]"> </div>'; // end modify settings // we are editing an existing document if( $_REQUEST['a'] == '27' ){ // $id is populated with the current modx document id $tab_details = $modx->db->getRow( $modx->db->select( '*', $modx->getFullTablename( $table_name ), 'docid="'.$id.'" AND name="'.$item_name.'"')); } $replace = array( '[+tab_title+]' => $tab_title, '[+tab_heading+]' => $tab_heading, '[+tab_content+]' => $tab_content, '[+hidden_item_name+]' => $item_name, '[+hidden_item_id+]' => $_REQUEST['a'] == '27' ? $tab_details['id'] : '', '[+item_name+]' => $item_name, '[+field_content+]' => $_REQUEST['a'] == '27' ? $modx->htmlspecialchars($tab_details['content']) : '' ); $output .=str_replace( array_keys( $replace ), array_values( $replace ), $tab_tpl ); /*====== end tab block ======*/ // send the tabs output echo $output; break; case 'OnDocFormSave': /*====== copy this block and modify for each of the form fields ======*/ if( isset ( $_POST['EXAMPLE'] ) ){ $post_value = $modx->db->escape( trim( $_POST['EXAMPLE'] ) ); $post_id =$_POST['EXAMPLE_ID']; $post_name =$_POST['EXAMPLE_NAME']; $status =''; if( $post_id !='' ){ // we are editing an existing item $fields = array( 'content' => $post_value ); $update = $modx->db->update( $fields, $modx->getFullTablename( $table_name ), 'docid="'.$id.'" AND id="'.$post_id.'"' ); $status .= $update ? 'update success' : 'update failed'; }else{ // creating a new item $fields = array( //'id' => '', 'name' => $post_name, 'docid' => $id, 'content' => $post_value ); $insert = $modx->db->insert( $fields, $modx->getFullTablename( $table_name ) ); $status .= $insert ? 'insert success' : 'insert failed'; } // log this event - Reports / System Events // comment this out after testing $modx->logEvent( 0, 1, 'status: '.$status.' - name: '.$post_name.' - id: '.$post_id.'<br>'.$post_value , 'Tabs plugin' ); } /*====== end of copy block ======*/ break; default: ''; return; } ?>