Jak wczytać a następnie zapisać plik w TinyMCE

Witam

Uprzedzam jestem totalnie zielony jeśli chodzi o php dlatego proszę o jak najwięcej szczegółów. Potrzebuję by edytor tinymce po załadowaniu otwierał konkretny plik do edycji a następnie po zakończeniu jego edycji (poprzez kliknięcie przycisku submit pod edytorem) zapisywał zmiany do tego pliku. Bardzo proszę o pomoc jak to zrobić najchętniej z przykładowymi plikami.

Z tego co się orientuję TinyMCE to js, a php używasz zupełnie tak jakby to był zwykły normalny formularz bez żadnego edytora.

Podpinasz TinyMCE pod textarea z odpowiednimi parametrami w plikach html.

Najprościej ujmując - TinyMCE z pola <textarea> robi nakładkę WYSIWIG (coś jak tutaj w odpowiedziach).

To co wpiszesz w TinyMCE de facto jest również w <textarea>. To co umieścisz przed dodaniem <textarea> zostanie “otoczone” tym WYSIWIGIEM.

Dzięki serdeczne biorę się do roboty z samą instalacją tinymce chyba sobie poradzę gorzej właśnie z wysyłaniem i otwieraniem pliku… Niestety z języków znam tylko basha :wink: a to się nijak nie nada chociaż dla własnych projektów tam gdzie mogę to pewne rzeczy robię po stronie serwera i wyplówam wynik za pomocą shell_exec w php :wink:

Takie funkcje powinny być zablokowane w php ze względów bezpieczeństwa.

 

Ogólnie pliku nie wysyłasz nigdzie, tylko samą treść. Zrób następujące kroki:

  1. otworzenie pliku

  2. wypisanie zawartości pliku pomiędzy textarea

  3. wyświetlenie całego html’a z podpiętym tinymce

  4. obsługa tego formularza z textarea - czyli zapisanie zmienionej zawartości w textarea w pliku

 

Na początek zrób sobie prosty edytor bez bajerów tinymce do edycji zwykłych plików tekstowych. Potem nałożysz na to tylko tiny i zrobione.

Witajcie

po uporaniu się w końcu z instalacją tinymce, jego konfiguracją pod siebie, uploaderem plików i kilku innych rzeczach zabrałem się za to o co pytałem w pierwszym poscie, otóż skleiłem coś takiego:

<?php 
if (!defined("DOSTEP")) die("Brak dostepu!");
{
	?>
	
	<?php
$plik = '../csijs/popup2.html';
$tresc = file_get_contents($plik);

if( !empty($_POST['tekst']) ){
file_put_contents($plik, $tresc);
}

?>
<form method="post">
	
<textarea name="tekst" cols="50" rows="25" maxlength="" autofocus required><?= $tresc = file_get_contents($plik); ?></textarea>
<input type="submit" value="zapisz">
</form>
<? }	
?>

efekt jest taki, że plik …/csijs/popup2.html się otwiera jednak gdy klikam na zapisz to treść się nie zapisuje do pliku tylko widzę poprzednią jego treść. Co zrobiłem nie tak? Dodam, że żadne funkcje php nie są zablokowane, sprawdziłem przez phpinfo

Najpierw zapisujesz jeśli jest taka potrzeb dopiero potem otwierasz do wyświetlania. W tej chwili masz tak że otwierasz starą wersję, zapisujesz nową i wyświetlasz to co otworzyłeś.

Poza tym w textarea chyba powinno być echo jeszcze.

Niestety nie umiem przekuć twych słów w czyny fizydo :wink: jeśli zechciałbyś poratować gotowcem będę wdzięczny :wink:

<?php 
if (!defined("DOSTEP")) die("Brak dostepu!");
{
    ?>
    
    <?php
    
if( !empty($_POST['tekst']) ){
file_put_contents($plik, $tresc);
}

$plik = '../csijs/popup2.html';
$tresc = file_get_contents($plik);



?>
<form method="post">
    
<textarea name="tekst" cols="50" rows="25" maxlength="" autofocus required><?= $tresc = file_get_contents($plik); ?></textarea>
<input type="submit" value="zapisz">
</form>
<? }	
?>

Sprawdź czy zadziała

Czy plik …/csijs/popup2.html ma uprawnienia do zapisu dla “pozostałych” (other)?

Niestety przy próbie zapisania zmian w pliku dostaję taki komunikat

teraz jest jeszcze ciekawiej, plik się otwiera do edycji ale gdy wpisuję treść do edytora i klikam zapisz to plik, który ma zostać zapisany jest czyszczony

Masz tutaj działający przykład

<html>
	<head>
		<title>Test zapisu pliku</title>
		
		<style>
			body > div {
				margin: 20px 0;
			}
			
			.message {
				padding: 15px;
				border: 1px solid;
				border-radius: 5px;
			}
			
			.message p {
				margin: 0;
			}
			
			.message.error {
				background-color: rgba(255, 0, 0, 0.2);
				border-color: rgba(255, 0, 0, 0.5);
			}
			
			.message.success {
				background-color: rgba(0, 255, 0, 0.2);
				border-color: rgba(0, 255, 0, 0.5);
			}
		</style>
	</head>
	
	<body>
		<?php
			$messages = array();
			$file = './edytor.txt';
			
			if(isset($_POST['editor']))
				if(!empty($_POST['editor']))
				{
					$content = $_POST['editor'];
					
					if(file_put_contents($file, $content))
						$messages[] = array('status' => 'success', 'message' => 'Plik został zapisany');
					else
						$messages[] = array('status' => 'error', 'message' => 'Błąd zapisu pliku');
				}
				else
				{
					$messages[] = array('status' => 'error', 'message' => 'Brak zawartości do zapisania');
				}
			
			$content = file_get_contents($file);
			
			if(!$content)
				$messages[] = array('status' => 'error', 'message' => 'Nie udało się odczytać pliku');
			
			if(!empty($messages)) :
				?>
					<div id="messages">
						<?php foreach($messages as $message) : ?>
							<div class="message <?php echo $message['status']; ?>">
								<p><?php echo $message['message']; ?></p>
							</div>
						<?php endforeach;?>
					</div>
				<?php
			endif;
			
			if($content):
				?>
					<form method="post">
						<textarea name="editor" cols="50" rows="25"><?php echo $content; ?></textarea>
						
						<button type="submit">Zapisz</button>
					</form>
				<?php
			endif;
		?>
	</body>
</html>

Pisany na szybko z palca, i sporo do dopracowania w nim jest, ale działa.

EDIT:

Jeśli się nie uczysz tylko chcesz coś zrobić, może zastanów się nad zleceniem tego komuś. To co dałem to prosty przykład i wymaga jeszcze zabezpieczeń i masy poprawek.

dzięki serdeczne za pomoc… podczepię jeszcze do tego panel logowania user / pass natomiast co do zlecenia tego komuś to za bardzo nie mam jak, robię choć uwierz, wolałbym zapłacić z własnej kieszeni i mieć święty spokój mimo, że robię to nie dla siebie. Więcej nie chcę i nie mogę za bardzo powiedzieć. Uczyć to ja bym się chętnie pouczył ale jak wspomniałem ja siedzę bardziej w serwerach / bash / perl a PHP znam tyle, żeby sprawdzić czy serwer działa ewentualnie zainstalować gotowy skrypt, więc musiałvym zacząć od absolutnych podstaw, które ani mi nijak nie wchodzą do głowy ani nie mam sił po pracy.