Skocz do zawartości
  • 0
X3nO

Edytor IP.Board w aplikacji

Pytanie

Witam, chcę stworzyć edytor BBCode z IP.Board w mojej aplikacji. dodałem:

        $LoadEditor = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
        $editor = new $LoadEditor();
        $edytor = $editor->show( 'changes', array(
			'type' => 'medium',
			'minimize' => FALSE,
			'height' => 150,
			'autoSaveKey' => '',
			'warnInfo' => NULL,
			'modAll' => FALSE,
			'recover' => FALSE,
			'noSmilies' => FALSE,
			'isHtml' => FALSE,
			'isRte' => NULL,
			'isTypingCallBack' => '',
			'delayInit' => FALSE,
			'editorName' => NULL
		) );

Potem wyświetlam to w szablonie zmienną {$edytor}, ogólnie cel tego to wysyłanie changelogów do bazy danych. Stworzyłem już insert, lecz edytor się nie pokazuje (mam zwykłe textarea). Cały kod:

		$this->DB->build( array(
			'select' => '*',
			'from' => 'changes',
			'order' => 'data DESC'
		) );
		$this->DB->execute();
		$changes = [];
		$count = 0;
		while ($r = $this->DB->fetch())
		{
			$count++;
			$r['autorInfo'] = IPSMember::load( $r['author'] );
			$r['autorImage'] = IPSMember::buildProfilePhoto($r['autorInfo']);
			$r['autorProfile'] = IPSMember::makeProfileLink($r['autorInfo']['prefix'].$r['autorInfo']['name'].$r['autorInfo']['suffix'],$r['autorInfo']['member_id']);

			$changes[] = $r;
		}

        $LoadEditor = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
        $editor = new $LoadEditor();
        $edytor = $editor->show( 'changes', array(
			'type' => 'medium',
			'minimize' => FALSE,
			'height' => 150,
			'autoSaveKey' => '',
			'warnInfo' => NULL,
			'modAll' => FALSE,
			'recover' => FALSE,
			'noSmilies' => FALSE,
			'isHtml' => FALSE,
			'isRte' => NULL,
			'isTypingCallBack' => '',
			'delayInit' => FALSE,
			'editorName' => NULL
		) );
		
        if(isset($_POST['dodaj']))
        {
			$this->DB->insert( "changes", array( 'author' => $this->memberData['member_id'], 'thead' => $editor, 'data' => date("Y-m-d H:i:s") ) );
		}

		return $this->returnHtml( $this->registry->output->getTemplate('panel')->changes( $changes, $count, $edytor ) );
<h3>Ostatnie zmiany</h3>
<table class="ipb_table">
	<tbody>
		<if test="$count">
			<foreach loop="$changes as $change">
				<tr>
  					<td style="width: 1px;">
						<span class="left">
							<a href='index.php?showuser={$change['autorInfo']['member_id']}' class='ipsUserPhotoLink left'>
								<img src='{$change['autorImage']['pp_small_photo']}' width='25' height='25' class='ipsUserPhoto ipsUserPhoto_mini' />
							</a>
						</span>
					</td>
					<td>
						<p class="ipsType_smaller desc lighter">
							{$change['autorProfile']} - {$change['data']}
						</p>
						<p class="desc" style="background: #142948; padding: 5px">
							{$change['thead']}
						</p>
					</td>
				</tr>
			</foreach>
		<else />
			<div class="ipsPad">Brak changelogów.</div>
		</if>
	</tbody>
</table>
{$edytor}

Z góry dzięki za pomoc.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

13 odpowiedzi na to pytanie

Polecane posty

  • 1
  1. nie zasłaniaj się ipb, bo to są podstawy php
  2. oczywiście, że nie zapisuje bo:
    1. dane z edytora są w zmiennej $_POST[ 'chanes' ]
    2. musisz je jeszcze "obrobić" przed zapisem
      $save = $editor->process( $_POST[ 'changes' ] );
      IPSText::getTextClass('bbcode')->parse_html			= 0;
      IPSText::getTextClass('bbcode')->parse_nl2br		= 0;
      IPSText::getTextClass('bbcode')->parse_smilies		= 1;
      IPSText::getTextClass('bbcode')->parse_bbcode		= 1;
      IPSText::getTextClass('bbcode')->parsing_section	= 'content';
      
      $save = IPSText::getTextClass( 'bbcode' )->preDbParse( $save );

      i dopiero teraz zapisujesz to co jest w $save

  3. Jasne, że pokaże dane po odświeżeniu. Kod napisałeś tak, że najpierw pobiera dane z bazy a później dopiero dodaje nowe rzeczy

  • Like 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 1

Tego nie definiujesz, umieszczając edytor na stronie on sam dołącza odpowiednie zmienne i biblioteki. a próbowałeś zmieniać na to co podesłałem?

Poza tym sam edytor i tak Ci nic nie da, bo nie masz tam formularza, który by wysyłał dane z tego edytora

  • Like 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 1

Musze być zalogowany, ale nie ważne.

Jak używasz modala to tutaj będzie większy problem. nie pamiętam czy w modalu da się umieścić edytor

  • Like 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 1

zgodnie z:

<form action="index.php?app=panel&module=changelog&section=changelog" method="post">

żądanie idzie do index.php panelu admina ale nie ma żadnych informacji o sesji ani nic. musisz mieć ukryte inputy z odpowiednimi danymi. zobacz w innych formularzach jak to tam wygląda

  • Like 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Sprawdź błędy konsoli JS, bo skoro pokazuje się textarea to znaczy że działa, ewentualnie wywal wszystkie opcje w tablicy przy show i daj coś takiego:

$editor->show( 'changes', array(), '' );

 

  • Like 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

w konsoli ReferenceError: Can't find variable: CKEDITOR

 

Lecz no nie wiem jak zdefiniować tą zmienną

Edytowano przez X3nO

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
1 godzinę temu, Spanner napisał:

Tego nie definiujesz, umieszczając edytor na stronie on sam dołącza odpowiednie zmienne i biblioteki. a próbowałeś zmieniać na to co podesłałem?

Poza tym sam edytor i tak Ci nic nie da, bo nie masz tam formularza, który by wysyłał dane z tego edytora

Tak, zmieniłem na ten kod co dałeś. Zauważyłem, że edytor działa w postach (Ten edytor mam w modal-ajaxie). Można zobaczyć tu:

http://fullgaming.eu/index.php?/topic/1-welcome/#entry3

Po kliknięciu na "Ostatnie zmiany" w menu. Kod formularza:

<form action="index.php" method="post">
	<div class="ipsPad">{$edytor}</div><br />
	<center><fieldset>
		<input type="submit" name="submit" class="input_submit" value="Napisz" tabindex="50" accesskey="s" id="submit_post">
	</fieldset></center><br />
</form>

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Zaraz sprawdzę, czy w modułach administracyjnych będzie działać

Przy przebudowie aplikacji mam błąd:

Fatal error: Class 'skin_global_4' not found in /var/www/AdminCP/sources/classes/output/publicOutput.php(3849) : eval()'d code on line 3

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Dzięki, działa.

Zrobiłem sobie taki oto kod w module administracyjnym:

        $this->DB->build( array(
            'select' => '*',
            'from' => 'changes',
            'order' => 'data DESC'
        ) );
        $this->DB->execute();
        $changes = [];
        $count = 0;
        while ($r = $this->DB->fetch())
        {
            $count++;
            $r['autorInfo'] = IPSMember::load( $r['author'] );
            $r['autorImage'] = IPSMember::buildProfilePhoto($r['autorInfo']);
            $r['autorProfile'] = IPSMember::makeProfileLink($r['autorInfo']['prefix'].$r['autorInfo']['name'].$r['autorInfo']['suffix'],$r['autorInfo']['member_id']);

            $changes[] = $r;
        }

        $LoadEditor = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
        $editor = new $LoadEditor();
        $edytor = $editor->show( 'changes', array(), '' );
        
        if(isset($_POST['dodaj']))
        {
            $this->DB->insert( "changes", array( 'author' => $this->memberData['member_id'], 'thead' => $editor, 'data' => date("Y-m-d H:i:s") ) );
        }

$panel .= '<div class="acp-box">
    <h3>Ostatnie zmiany</h3>';
    if ($count) {
        $panel .= '<table class="ipsTable double_pad">
            <thead>
                <tr class="member_column_titles">
                    <th>&nbsp;</th>
                    <th>Nick</th>
                    <th>Data</th>
                    <th>Treść</th>
                </tr>';
                foreach ($changes as $change) {
                    $panel .= '<tr class="member_row">
                        <td> 
                            <a href="index.php?app=members&module=members&section=members&do=viewmember&member_id='.$change['autorInfo']['member_id'].'" class="ipsUserPhotoLink left">
                                <img src="'.$change['autorImage']['pp_small_photo'].'" style="width: 30px; height: 30px; border: 1px solid #d8d8d8" />
                            </a>
                        </td>
                        <td>'.$change['autorProfile'].'</td>
                        <td>'.$change['data'].'</td>
                        <td>'.$change['thead'].'</td>
                    </tr>';
                }
        $panel .= '</tbody>
    </table>';
    } else {
        $panel .= '<center>Brak changelogów</center>';
    }
$panel .= '</div>
<form action="index.php?app=panel&module=changelog&section=changelog" method="post">
    <div class="ipsPad">'.$edytor.'</div><br />
    <center><fieldset>
        <input class="button primary" type="submit" value="Napisz changelog">
    </fieldset></center><br />
</form>';

        return $panel;

Lecz jak wysyłam post odsyła mnie do okienka logowania :/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
12 minut temu, Spanner napisał:

zgodnie z:


<form action="index.php?app=panel&module=changelog&section=changelog" method="post">

żądanie idzie do index.php panelu admina ale nie ma żadnych informacji o sesji ani nic. musisz mieć ukryte inputy z odpowiednimi danymi. zobacz w innych formularzach jak to tam wygląda

Okej, znalazłem:

<form action="'.$this->settings['base_url'].'?app=panel&module=changelog&section=changelog" method="post">
    <div class="ipsPad">'.$edytor.'</div><br />
    <center><fieldset>
        <input class="button primary" type="submit" value="Napisz changelog">
    </fieldset></center><br />
</form>

Lecz coś nie pobiera mi tekstu z edytora

        if ( $_POST ) {
            $this->DB->insert( "changes", array( 'author' => $this->memberData['member_id'], 'thead' => $editor, 'data' => date("Y-m-d H:i:s") ) );
        }

Oraz po wysłaniu posta nie pokazuje się wynik (Trzeba odświeżyć stronę). Zadaję takie banalne pytania ale to jest moja pierwsza aplikacja na IPB3 w której wykorzystuję takie funkcje :/

 

Zmienna $editor:

        $LoadEditor = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
        $editor = new $LoadEditor();
        $edytor = $editor->show( 'changes', array(), '' );

 

Edytowano przez X3nO

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Dziękuję Ci bardzo. Bez tej pomocy daleko bym nie zaszedł. Jeszcze raz wielkie dzięki

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość
Temat jest zablokowany i nie można w nim pisać.

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×

Ważne informacje

Kontynuując przeglądanie strony, wyrażasz zgodę na używanie przez nas plików cookies.