Wsparcie » Wtyczki » Własna wtyczka – dodawanie produktów i zdjęć

  • Witam,

    jestem newbie w PHP więc proszę o wyrozumiałość 🙂 piszę wtyczkę do WordPress, która za zadanie ma dodawanie produktów do bazy danych, późniejsze wyświetlanie ich w szablonie za pomocą shortcode’a, oraz także edycję danego produktu w formularzu. Mam kilka zagadnień z którymi się borykam.

    1. Serializowałem dane z checkbox np. w miejscu $obj_box = serialize($_POST['obj_box']);
    Próbuję je później unserializować aby odczytać i wyświetlić sam przesłany tekst w formularzu, wywala mi błędy.

    Próbowałem:

    foreach ($result as $result1) {
                echo '<tr>';
                echo '<td>'.$get_object_id = unserialize($result1->obj_box).'</td>';
                echo '</tr>';
           }
           echo '</table>';

    Dostaję Notice: Array to string conversion i w komórce zamiast wartości np. „Obiekty sportowe”, sam napis 'Array’.

    2. Mam jeden formularz z wprowadzaniem produktów i drugą stronę do przeglądania produktów. Chciałbym móc edytować dane produktów klikając przycisk edytuj obok rekordu na stronie przeglądania produktów i umieścić dane tego produktu w formularzu, tak żeby się wyświetliły i móc je nadpisać.

    3. Chciałbym dodawać obrazki do produktów przez formularz. Jak się do tego zabrać? Czytałem że niezalecane jest używanie BLOB ze względu na wydajność. Dodawanych obrazków może być do kilkudziesięciu.

    Cały kod poniżej:

    function wp_wykladziny_init()
    {
    wp_register_style('wp-wykladziny-css', plugins_url('style.css', __FILE__));
    wp_enqueue_style('wp-wykladziny-css');
    }
    add_action('init', 'wp_wykladziny_init');
     
    define( 'FLIF_PATH', plugin_dir_path( __FILE__ ) );
    require FLIF_PATH.'flif_model.php';
     
    defined( 'ABSPATH' ) or die( 'Nie podłączaj mi się tu tym swoim zawirusowanym skryptem!!' );
     
    /* Tworzy tabelę bazy danych dla wtyczki */
     
    function flif_install() {
    	global $wpdb;
        $table = $wpdb->prefix . "fl_insert_floor";
    	$charset_collate = $wpdb->get_charset_collate();
     
    	$sql = "CREATE TABLE IF NOT EXISTS $table (
            <code>id</code> mediumint(9) NOT NULL AUTO_INCREMENT,
            <code>name</code> text NOT NULL, UNIQUE (<code>id</code>),
    	<code>obj_box</code> text NOT NULL,
    	<code>material</code> text NOT NULL,
    	<code>producer</code> text NOT NULL,
    	<code>installation</code> text NOT NULL,
    	<code>characteristic</code> text NOT NULL,
    	<code>content</code> text NOT NULL,
    	<code>gr_fleece</code> text NOT NULL,
    	<code>gr_total</code> text NOT NULL,
    	<code>height_total</code> text NOT NULL,
    	<code>height_fleece</code> text NOT NULL,
    	<code>tuft</code> text NOT NULL,
    	<code>fire_class</code> text NOT NULL,
    	<code>sound_absorb</code> text NOT NULL,
    	<code>description</code> text NOT NULL
     
    	) $charset_collate;";
    	require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    	dbDelta( $sql );
    }
     
    register_activation_hook(__FILE__, 'flif_install');
     
    /** * Dodawanie wtyczki do panelu administracyjnego */
    function flif_plugin_menu() {
        add_menu_page('Wykładziny', 'Wykładziny', 'administrator', 'flif_settings', 'flif_display_settings');
        add_submenu_page('flif_settings', __('Wprowadź produkt'), __('Wprowadź produkt'), 'edit_themes', 'flif_propert', 'flif_propert');
    	add_submenu_page('flif_settings', __('Przeglądaj wykładziny'), __('Przeglądaj wykładziny'), 'edit_themes', 'flif_browsing', 'flif_browsing');
    }
    add_action('admin_menu', 'flif_plugin_menu');
     
     
    //Wyswietla formularz dodawania produktu do bazy
     
    function flif_propert() {
     
    	if (isset($_POST["name"]) != "" ) 
    	{
    		global $wpdb;
    		$table = $wpdb->prefix."fl_insert_floor";
     
    		$name = strip_tags($_POST["name"], "");
    		$description = strip_tags($_POST["description"], "");
    		$obj_box = serialize($_POST['obj_box']); //wrzuca tablice do jednego rekordu w tabeli mysql
    		$material = strip_tags($_POST["material"], "");
    		$producer = strip_tags($_POST["producer"], "");
    		$installation = serialize($_POST['installation']);
    		$characteristic = serialize($_POST['characteristic']);
    		$content = strip_tags($_POST["content"], "");
    		$gr_fleece = strip_tags($_POST["gr_fleece"], "");
    		$gr_total = strip_tags($_POST["gr_total"], "");
    		$height_total = strip_tags($_POST["height_total"], "");
    		$height_fleece = strip_tags($_POST["height_fleece"], "");
    		$tuft = strip_tags($_POST["tuft"], "");
    		$fire_class = strip_tags($_POST["fire_class"], "");
    		$sound_absorb = strip_tags($_POST["sound_absorb"], "");
     
    		$wpdb->insert( 
            $table, 
            array( 
                'name' => $name,
    			'obj_box' => $obj_box,
    			'material' => $material,
    			'producer' => $producer,
    			'installation' => $installation,
    			'characteristic' => $characteristic,
    			'content' => $content,
    			'gr_fleece' => $gr_fleece,
    			'gr_total' => $gr_total,
    			'height_total' => $height_total,
    			'height_fleece' => $height_fleece,
    			'tuft' => $tuft,
    			'fire_class' => $fire_class,
    			'sound_absorb' => $sound_absorb,
    			'description' => $description
            )
    	);
    }
    // adds a shortcode you can use: [insert-into-db]
    add_shortcode('flif-db-insert', 'flif_insert_into_db');
     
     
        echo '<h2>' . __('Wprowadż wykładzinę') . '</h2>';
        echo '<form action="?page=flif_propert" method="post">
     
    		<label for="name">Nazwa</label><input name="name" type="text" style="width: 50%;" value="" >
    		</br></br>
     
    		<label for="producer">Producent</label>
    		<select name = "producer"> 
    			<option>Altro</option>
    			<option>Balsan</option>
    			<option>Burmatex</option>
    			<option>Fatra</option>
    			<option>Forbo</option>
    			<option>Ideal</option>
    			<option>Lano</option>
    			<option>Lentex</option>
    			<option>Modulyss</option>
    			<option>Tarkett</option>
    			<option>Tecsom</option>
    			<option>Timzo</option>
    			<option>...inny</option>
    		</select>
    		</br></br>
     
    		<label>Typ obiektu:</label></br>
    			<input type="checkbox" value="Hotele i pensjonaty" name="obj_box[]" >Hotele i pensjonaty
    			<input type="checkbox" value="Obiekty sportowe" name="obj_box[]" >Obiekty sportowe
    			<input type="checkbox" value="Szkoły" name="obj_box[]" >Szkoły</br>
    			<input type="checkbox" value="Biura" name="obj_box[]" >Biura
    			<input type="checkbox" value="Domy i mieszkania" name="obj_box[]" >Domy i mieszkania
    			<input type="checkbox" value="Kina, teatry, restauracje" name="obj_box[]" >Kina, teatry, restauracje</br>
    			<input type="checkbox" value="Wojsko, policja" name="obj_box[]" >Wojsko, policja
    			<input type="checkbox" value="Sklepy" name="obj_box[]" >Sklepy
    			<input type="checkbox" value="Szpitale i służba zdrowia" name="obj_box[]" >Szpitale i służba zdrowia</br>
    			<input type="checkbox" value="Przemysł" name="obj_box[]" >Przemysł
    			<input type="checkbox" value="Laboratoria" name="obj_box[]" >Laboratoria
    			</br></br>
     
    		<label for="material">Materiał wykonania</label>
    		<select name = "material"> 
    			<option>Dywanowa</option>
    			<option>PVC Homogeniczna</option>
    			<option>PVC Heterogeniczna</option>
    			<option>Winylowa LVT</option>
    			<option>Linoleum</option>
    		</select>
     
    		</br></br>
    		<label>Instalacja:</label></br>
    			<input type="checkbox" value="Rolka" name="installation[]" >Rolka
    			<input type="checkbox" value="Płytka" name="installation[]" >Płytka
    			<input type="checkbox" value="Panel" name="installation[]" >Panel
    			</br></br>
     
    		<label>Charakterystyka:</label></br>
    			<input type="checkbox" value="Redukcja dźwięków" name="characteristic[]" >Redukcja dźwięków
    			<input type="checkbox" value="Bakteriostatyczna" name="characteristic[]" >Bakteriostatyczna
    			<input type="checkbox" value="Antypoślizgowa" name="characteristic[]" >Antypoślizgowa
    			<input type="checkbox" value="Ognioodporna" name="characteristic[]" >Ognioodporna
    			</br></br>
     
    		<label for="content">Skład:</label><input name="content" type="text" style="width: 10%;" value="" >
    		<label for=""></label>Gramatura runa:</label><input name="gr_fleece" type="text" style="width: 10%;" value="" ></br>
    		<label for=""></label>Gramatura całkowita:</label><input name="gr_total" type="text" style="width: 10%;" value="" >
    		<label for=""></label>Wysokość całkowita:</label><input name="height_total" type="text" style="width: 10%;" value="" ></br>
    		<label for=""></label>Wysokość runa:</label><input name="height_fleece" type="text" style="width: 10%;" value="" >
    		<label for=""></label>Ilość splotów:</label><input name="tuft" type="text" style="width: 10%;" value="" ></br>
    		<label for=""></label>Klasa palności:</label><input name="fire_class" type="text" style="width: 10%;" value="" >
    		<label for=""></label>Absorpcja dźwięku:</label><input name="sound_absorb" type="text" style="width: 10%;" value="" ></br>
     
    		</br></br>
    		<label for="name">Opis</label><textarea name="description" rows="14" cols="120" value="" ></textarea>
    		</br></br><input type="submit" value="' . __('Save') . '" /></td></tr>
    		</form>';
     
        echo '
           <script type="text/javascript">
            jQuery(document).ready(function($) {
            $("table .delete").click(function() {
            $(this).parent().parent().remove();
            return false;
            });
            </script>
            ';
    }
     
    //Formularz do przeglądania wykładzin
     
    function flif_browsing() {
    	global $wpdb;
        $table = $wpdb->prefix . "fl_insert_floor";
     
    	$result = $wpdb->get_results("SELECT * FROM <code>wp_fl_insert_floor</code>") or die('Error3');
     
    	 echo '<table summary="Properties" id="table1">';
    	 echo '<tr>';
    	 echo '<td><b>ID</b></td>';
    	 echo '<td><b>Nazwa</b></td>';
    	 echo '<td><b>Edytuj</b></td>';
    	 echo '<td><b>Typ obiektu</b></td>';
    	 echo '<td><b>Materiał</b></td>';
    	 echo '<td><b>Producent</b></td>';
    	 echo '<td><b>Opis</b></td>';
    	 echo '<td><b>Instalacja</b></td>';
    	 echo '<td><b>Charakterystyka</b></td>';
    	 echo '<td><b>Skład</b></td>';
    	 echo '<td><b>Gramatura runa</b></td>';
    	 echo '<td><b>Gramatura całkowita</b></td>';
    	 echo '<td><b>Wysokość runa</b></td>';
    	 echo '<td><b>>Wysokość całkowita</b</td>';
    	 echo '<td><b>Ilość pętli</b></td>';
    	 echo '<td><b>Klasa palności</b></td>';
    	 echo '<td><b>Absorbcja dźwięku</b></td>';
    	 echo '</tr>';
     
    		foreach ($result as $result1) {
    			$id=$_POST['id'];
                echo '<tr>';
    			echo '<td>'.$get_object_id = $result1->id.'</td>';
    			echo '<td>'.$get_object_id = $result1->name.'</td>';
    			echo '<td><a href="?id=$id">[klik!]</a></td>';
    			echo '<td>'.$get_object_id = $result1->obj_box.'</td>';
    			echo '<td>'.$get_object_id = $result1->material.'</td>';
    			echo '<td>'.$get_object_id = $result1->producer.'</td>';
    			echo '<td>'.$get_object_id = $result1->description.'</td>';
    			echo '<td>'.$get_object_id = $result1->installation.'</td>';
    			echo '<td>'.$get_object_id = $result1->characteristic.'</td>';
    			echo '<td>'.$get_object_id = $result1->content.'</td>';
    			echo '<td>'.$get_object_id = $result1->gr_fleece.'</td>';
    			echo '<td>'.$get_object_id = $result1->gr_total.'</td>';
    			echo '<td>'.$get_object_id = $result1->height_total.'</td>';
    			echo '<td>'.$get_object_id = $result1->height_fleece.'</td>';
    			echo '<td>'.$get_object_id = $result1->tuft.'</td>';
    			echo '<td>'.$get_object_id = $result1->fire_class.'</td>';
    			echo '<td>'.$get_object_id = $result1->sound_absorb.'</td>';
    			echo '</tr>';
    			echo '</br>';
           }
    	   echo '</table>';
    } 
     
    // Edycja wpisu do bazy danych
Viewing 1 replies (of 1 total)
  • Thread Starter bienio

    (@bienio)

    Przy okazji – proszę o uwagi odnośnie kodu.

    Mój plan jest taki że wtyczka pobiera z formularza dane produktu, parę pól tekst, select i checkboxów, oraz pliki graficzne, następnie wyświetli produkt na stronie za pomocą shortcode’a.

Viewing 1 replies (of 1 total)
  • Temat ‘Własna wtyczka – dodawanie produktów i zdjęć’ jest zamknięty na nowe odpowiedzi.